2017-04-07 154 views
1

我創建WPF應用程序並在我的設置面板中有幾個標籤,文本框,組合框和兩個按鈕(保存)和(取消)。WPF - 組合框項目被複制

的XAML

<ComboBox x:Name="myCombobox" Grid.Column="1" Margin="18,372,4,0" VerticalAlignment="Top" Height="26" SelectionChanged="MyCombobox_SelectionChanged" /> 

我已經加入項目,我的組合框:

myCombobox.Items.Add("Test1"); 
myCombobox.Items.Add("Test2"); 
myCombobox.Items.Add("Test3"); 
foreach (var item in myCombobox.Items) 
    if (item.Equals(Properties.Settings.Default.MyCombobox)) 
     myCombobox.SelectedItem = item; 

,並添加SelectionChanged事件。這是它的外觀:

private void MyCombobox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if (myCombobox.SelectedItem.ToString().Equals("Test1")) 
    { 
     testGrid.Visibility = Visibility.Visible; 
    } 
    else if (myCombobox.SelectedItem.ToString().Equals("Test2") || myCombobox.SelectedItem.ToString().Equals("Test3")) 
    { 
     testGrid.Visibility = Visibility.Hidden; 
    } 
} 

當我點擊取消按鈕並重新啓動我的設置面板我的組合框的項目是重複的。 (相同的值兩次)。

我試圖通過增加Cancel按鈕單擊事件

myCombobox.Items.Clear(); 

但此時另一個問題存在(myCombobox.SelectedItem爲空),以防止這一點,我得到這個錯誤:

An exception of type 'System.NullReferenceException' occurred in IdentificationStation.exe but was not handled in user code

如何防止組合框項目被複制?或者我應該做其他的事情,有幫助嗎?

+0

myCombobox.Items.Clear();將此添加到onchange事件中。 –

+1

你是如何填充你的組合?應該添加與該問題相關的代碼。 – Anil

+0

該應用程序絕對在例程中調用了兩次'myComboBox.Items.Add(...)'。這叫什麼/如何?你能展示這種調用的方法嗎? – Jegan

回答

1

你就不能避免

'System.NullReferenceException'

通過測試,如果myCombobox.SelectedItem是空的MyCombobox_SelectionChanged

private void MyCombobox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if (myCombobox.SelectedItem != null) 
     if (myCombobox.SelectedItem.ToString().Equals("Test1")) 
     { 
      testGrid.Visibility = Visibility.Visible; 
     } 
     else if (myCombobox.SelectedItem.ToString().Equals("Test2") || myCombobox.SelectedItem.ToString().Equals("Test3")) 
     { 
      testGrid.Visibility = Visibility.Hidden; 
     } 
    } 
} 

我不認爲這樣做是不好的方式。

-2

使用此檢查,以阻止另外的重複項:

if(!myComboBox.Items.Contains("item")) 
{ 
    myComboBox.Items.Add("item"); 
} 
+0

如果組合框被動態更新,您只需要進行這些類型的驗證。對於像上面這樣的靜態更新,編碼人員應該能夠看到調用堆棧並修復例程,使其不會被調用兩次。 – Jegan