WPF多组合框通信

时间:2011-12-07 20:14:37

标签: wpf wpf-controls

我正在研究WPF应用程序。其中一个窗口包含6个组合框。

<ComboBox x:Name="ScenarioIDcb" Margin="0,5,0,2" Height="24" ItemsSource="{Binding}" SelectionChanged="ScenarioIDcb_SelectionChanged"/>
<ComboBox x:Name="ScenarioNamecb" Margin="0,2,0,2" Height="24" ItemsSource="{Binding}"/>
<ComboBox x:Name="ScenarioDescriptioncb" Margin="0,2,0,2" Height="24" ItemsSource="{Binding}"/>
<ComboBox x:Name="StepIDcb" Margin="0,2,0,2" Height="24" ItemsSource="{Binding}"/>
<ComboBox x:Name="StepNamecb" Margin="0,2,0,2" Height="24" ItemsSource="{Binding}"/>
<ComboBox x:Name="StepDescriptioncb" Margin="0,2,0,2" Height="24" ItemsSource="{Binding}"/>
<ComboBox x:Name="Expectedresultcb" Margin="0,2,0,2" Height="24" ItemsSource="{Binding}"/>

它们都绑定到一个可观察的字符串集合(ExcelColumnames)。

private void SetCBDataContext()
{
    if (this.ExcelColumnames != null && this.ExcelColumnames.Count > 0)
    {
        ScenarioIDcb.DataContext = this.ExcelColumnames;
        ScenarioNamecb.DataContext = this.ExcelColumnames;
        ScenarioDescriptioncb.DataContext = this.ExcelColumnames;
        StepIDcb.DataContext = this.ExcelColumnames;
        StepNamecb.DataContext = this.ExcelColumnames;
        StepDescriptioncb.DataContext = this.ExcelColumnames;
        Expectedresultcb.DataContext = this.ExcelColumnames;
    }          
}

我想要实现的是,如果其中一个组合框中的用户选择值,它不应出现在其他组合框中。如果用户在同一个组合框中选择其他值,则先前选择的值应出现在其他组合框中以供选择。请指导我。

感谢Priyank

1 个答案:

答案 0 :(得分:1)

我要做的是移动到GridView ListView,一列是名称并由所有人共享。然后为每个7指定一个布尔值,以指示是否选择了该值。在每个7上放置一个过滤器,如果其他任何一个选择它,则消除该值.ExcelColumnames需要是一个ObservableCollection。有关过滤,请参阅http://msdn.microsoft.com/en-us/library/ms752348.aspx。您可以使用一个过滤器并将其传递给ID,以便知道查看所有其他过滤器。

另一种方法是所有具有7个bool属性的ExcelColumnanames的List。然后从List中创建7个ObservableCollections,并使用Linq在.where中进行过滤。在这种情况下,master肯定是List而不是ObservableCollection,因为将ObservableCollection链接到List是非常简单的(只是在构造函数中传递List)但是将ObservableCollection链接到和ObservableCollection不是。我很确定你可以在构造函数中传递一个带有Linq的List但不是正面的。