我正在研究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
答案 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但不是正面的。