根据组合框选择的项目更改文本框值

时间:2014-02-21 12:50:02

标签: c# wpf combobox

我正在尝试使我的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等效物。

显然我可能不知道如何使用它。

非常感谢。

4 个答案:

答案 0 :(得分:1)

好的,我无法添加评论,所以这里提出建议。

尝试以这种方式获取当前值:

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";
        }
 }

我在这里编码,很抱歉任何错误输入。

答案 1 :(得分:1)

如果你想正确编写WPF,那么真的需要学习XAML。您不需要任何代码来执行您想要的操作(当然除了数据属性)。你只需要几个DataTrigger s:

即可
<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

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); }
}

答案 2 :(得分:0)

假设ComboBox中的项目只是字符串,您可以使用:

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

Selected上的ComboBox - 类型属性似乎反映了事件触发时的新选择,但Text属性仍然反映了之前的选择。

答案 3 :(得分:0)

我会将您的代码更改为:

browser.ignoreSynchronization = true