WPF Combobox DataBind

时间:2012-11-05 14:44:16

标签: c# wpf

我有两个组合框。第一个组合框用于选择管理器,第二个用于选择助理。经理。但是,两个combox中的源名称相同。因此,例如,如果我从第一个组合框中选择“James”,那么我将不会从第二个组合框中选择它。当我点击第二个组合框中的“James”时,它应该给我一个错误,不能选择“JAmes”。

我将该代码写入第二个组合框的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" />

4 个答案:

答案 0 :(得分: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;
} 

或类似的东西。它不漂亮,到目前为止不是最好的方式。但这很简单,并且完成了工作。

答案 1 :(得分:0)

您是否尝试过使用验证规则?您可以使用从ValidationRule继承的类,并在选择值之前检查其中的值。

Here您有一篇解释此主题的文章。希望它有所帮助。

答案 2 :(得分:0)

我只想使用LINQ过滤Asst_Manager列表,甚至在asst mgr列表中都没有mgr名称。在从第一个项目中选择一个项目之前,我不会激活第二个列表。

答案 3 :(得分: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;
        }
    }