2014-02-21 46 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"; 
     } 
    } 
相關問題