2012-11-05 143 views
0

我有兩個組合框。第一個組合框是用於選擇經理,第二個是用於選擇助理。經理。但是,兩個combox中的源名稱是相同的。因此,例如,如果我從第一個組合框中選擇「James」,那麼我將不會從第二個組合框中選擇它。當我點擊第二個組合框中的「James」時,它應該給我一個錯誤,並且不能選擇「JAmes」。WPF Combobox DataBind

我寫的代碼轉換成第二組合框的selection_changed事件:

if (Manager.SelectedItem == Asst_MAnager.SelectedItem) 
{ 
    MessageBox.Show("You must change Asst_Manager"); 
} 

這是正確的,如果我選擇相同的項目,然後它給我的錯誤信息。但是,它仍然會在錯誤信息後選擇相同的項目。我的WPF代碼如下。你可以給我任何想法嗎?

<local:ComboBoxCW Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="3" x:Name="Manager" Text="" Background="#FFC8D2E8" Margin="0,0,0,3" 
      SelectedID="{Binding Path=[Manager}" /> 
<local:ComboBoxCW Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="3" x:Name="Asst_Manager" Text="" Background="#FFC8D2E8" CWListName="Assistant Manager" Margin="0,0,0,3" 
      SelectedID="{Binding Path=[Asst_Manager]}" SelectionChanged="Asst_Manager_SelectionChanged" /> 

回答

2

由於您的組合框的數據綁定的,你不能設置的SelectedIndex爲-1(這應該取消你所做的,正常的任何選擇),並且是這樣的:

if (Manager.SelectedItem == Asst_MAnager.SelectedItem) 
{ 
    MessageBox.Show("You must change Asst_Manager"); 
    Asst_Manager.SelectedIndex = -1; 
} 

所以,我將在每個框中的第一個項目中顯示爲「選擇一個名稱」。你可以這樣做:

if (Manager.SelectedItem == Asst_MAnager.SelectedItem) 
{ 
    MessageBox.Show("You must change Asst_Manager"); 
    Asst_Manager.SelectedIndex = 0; 
} 

或類似的東西。這並不漂亮,而且遠不是最好的方式。但這很簡單,並且完成了工作。

+0

這真的很簡單的解決方案:)但我喜歡它 – Isi

+0

@Isi:編輯。那你的意思是? – MyCodeSucks

+0

thnx爲解決方案 – Isi

0

您是否嘗試過使用驗證規則?您可以使用從ValidationRule繼承的類,並在選擇該值之前檢查該值。

Here你有一篇文章解釋了這個話題。希望能幫助到你。

+0

是好的。我會應用這個。 thnx – Isi

0

我只是使用LINQ過濾Asst_Manager列表,甚至沒有在asst mgr列表上的mgr名稱。而且我不會讓第二個列表處於活動狀態,直到從第一個列表中選擇一個項目爲止。

0

您可以使用選擇改變的事件,如

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     string s = string.Empty; 
     string s1 =string.Empty; 
     if (comboBox2.SelectedItem != null) 
     { 
      s1 = comboBox2.SelectedItem.ToString(); 
     } 
     if (comboBox1.SelectedItem != null) 
     { 
      s = comboBox1.SelectedItem.ToString(); 
     } 
     if (s == s1) 
     { 
      MessageBox.Show("You have Selected These Item As Second Combobox"); 
      comboBox1.SelectedItem = null; 
     } 
    } 

    private void comboBox2_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     string s=string.Empty; 
     string s1 = string.Empty; 
     if (comboBox1.SelectedItem != null) 
     { 
      s = comboBox1.SelectedItem.ToString(); 
     } 
     if (comboBox2.SelectedItem != null) 
     { 
      s1 = comboBox2.SelectedItem.ToString(); 
     } 
     if (s == s1) 
     { 
      MessageBox.Show("You have Selected These Item As First Combobox"); 
      comboBox2.SelectedItem = null; 
     } 
    }