簡體   English   中英

根據組合框所選項目更改文本框值

[英]change textbox value depending on combobox selected item

我正在嘗試使我的 c#、wpf 應用程序使用“IF”語句根據組合框中的值相應地更改文本框中的值。

這個想法是,如果 Gender 組合框選擇了“Male”,那么 sex.Text 應該顯示“m”。 如果 Gender 選擇了“Female”,則 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 等效。

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

非常感謝幫助。

好吧,我不能添加一個cament,所以這里提出一個建議。

嘗試以這種方式獲取當前值:

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

我在這里編碼,很抱歉任何錯誤輸入。

如果你想正確編寫WPF,那么你真的需要學習XAML。 您不需要任何代碼來執行您想要的操作(當然除了數據屬性)。 你可以用幾個DataTrigger來做到這DataTrigger

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

假設您在ComboBox中的項目只是字符串,您可以使用:

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

看起來ComboBox上的Selected -type屬性反映了事件觸發時的新選擇,但Text屬性仍然反映了之前的選擇。

我會將您的代碼更改為:

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

我來晚了,但請參閱以下內容以獲得正確的編碼:

在 xaml 頁面中:

    <ComboBox x:Name="Gender" Grid.Row="0" Grid.Column="1" IsEditable="True" TextBoxBase.TextChanged="Gender_SelectionChanged"/>
    <TextBox  x:Name="Sex"    Grid.Row="0" Grid.Column="3"/>

在 C# 頁面中:

    private void Gender_SelectionChanged(object sender, RoutedEventArgs e)
    {
        Sex.Text = Gender.Text.ToLower().Substring(0, 1);
    }

祝你好運

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM