2014-02-21 47 views
0

我想让我的c#,WPF应用程序相应地使用'IF'语句在组合框中的值更改文本框中的值。更改文本框的值取决于组合框选定的项目

这个想法是,如果性别组合框选择了“男性”,那么sex.Text应该显示'm'。 如果性别选择了“女性”,那么sex.Text应显示“f”。但不幸的是,性文本框在第一次选择时不会显示任何内容。但之后,它一直呈现与我想要的相反。例如,当我选择女性时,它显示'm'并且反过来,就好像它有延迟行为的情况。

这里的事件:

private void gender_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (gender.Text == "Male") 
     { 
      sex.Text = "m"; 
     } 
     if (gender.Text == "Female") 
     { 
      sex.Text = "f"; 
     } 
    } 

如何使这项工作的任何线索?

我猜这可能与WinForms SelectedIndexChanged事件被SelectionChanged取代,因为它是wpf等价物。

很明显,我可能不知道如何使用它。

非常感谢。

+2

呃...'System.Windows.Controls.ComboBox'没有'TextChanged'事件。 – Athari

+0

尝试'组合框选定值已更改的事件',并将男性和女性的值设置为1和2,根据这些值您可以设置文本框值 – Harish

+0

对不起。刚解决这个问题。我输入它而不是复制和粘贴。我的错。 – Offer

回答

1

好吧,我不能添加coment,所以这里有个建议。

尝试获取的当前值是这样的:

private void gender_SelectionChanged(object sender, TextChangedEventArgs e) 
{ 
     var currentText = (sender as ComboBox).SelectedItem as string; 

     if (currentText.Equals("Male")) 
     { 
      sex.Text = "m"; 
     } 
     if (currentText.Equals("Female")) 
     { 
      sex.Text = "f"; 
     } 
} 

我只是编码这里,任何打错很抱歉。

+0

Hie。嗯,我得到了一个错误“。文本“,在这里它是:错误\t 22'对象'不包含'文本'的定义,并且没有扩展方法'文本'接受类型'对象'的第一个参数可以找到(你是否缺少using指令或者是一个程序集引用?)我认为这是我的错,因为我在这里打错了事件,它应该是SelectionChangedEventArgs而不是TextChangedEventArgs – Offer

+0

我刚才编辑答案SelectedItem表示放入ComboBox如果它是一个字符串,只需从对象中进行强制转换 –

+0

谢谢。它运行了这一次,但是我得到了经典的“对象引用未设置为对象的实例。”当我尝试选择时抛出异常性别:指向这段代码:if(currentText.Equals(“Male”))... – Offer

0

假设在ComboBox您的项目仅仅是字符串,你可以这样做:

private void gender_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    sex.Text = gender.SelectedValue.Equals("Male") ? "m" : "f"; 
} 

它看起来像在ComboBoxSelected型属性反映新的选择,当事件触发,但Text财产仍然反映了之前的选择。

+0

这几乎成功......问题是,运行时,它只显示'f'。从另一方面来说,它显示了它在第一次选择。 – Offer

+0

我测试了这个,它为我工作。你说你想让文本字段只显示“f”或“m”。还有什么你想在文本框中显示?或者你的意思是即使你改变了组合框中的选择,文本框也不会改变为“m”? –

+0

Apologees延迟。我的意思是你第二次猜测。无论我选择“男性”还是“女性”,它都不会更改为“m”。我们的代码不同的唯一部分是您的示例中的“TextChangedEventArgs”是我的“SelectionChangedEventArgs”。这是我的错,因为它首先被弄糊涂了。但如果你的代码运行,那么我猜我应该是你的相同... – Offer

0

如果你想正确的写WPF,那么你真的需要学习XAML。你不需要任何代码来做你想做的事(当然除了数据属性)。

<StackPanel> 
    <ComboBox Name="ComboBox" ItemsSource="{Binding Items}" /> 
    <TextBox> 
     <TextBox.Style> 
      <Style> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding SelectedItem.Text, 
         ElementName=ComboBox}" Value="Male"> 
         <Setter Property="TextBox.Text" Value="m" /> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding SelectedItem.Text, 
         ElementName=ComboBox}" Value="Female"> 
         <Setter Property="TextBox.Text" Value="f" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </TextBox.Style> 
    </TextBox> 
</StackPanel> 

当然,这是假设你有一个集合DependencyProperty将数据绑定到后面的代码:你可以只是一对夫妇的DataTrigger做吧

public static DependencyProperty ItemsProperty = DependencyProperty.Register("Items", typeof(ObservableCollection<Gender>), typeof(YourWindow)); 

public ObservableCollection<string> Items 
{ 
    get { return (ObservableCollection<string>)GetValue(ItemsProperty); } 
    set { SetValue(ItemsProperty, value); } 
} 
0

我会改变你的代码如下:

private void gender_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (gender.SelectedValue == "Male") 
     { 
      sex.Text = "m"; 
     } 
     if (gender.SelectedValue == "Female") 
     { 
      sex.Text = "f"; 
     } 
    } 
相关问题