2011-12-07 49 views
1

我正在WPF應用程序上工作。其中一個窗口包含6個組合框。WPF多個組合框通信

<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

我會做的是移動到一個GridView ListView和一個列的名稱和所有人共享。然後爲每個7都設置一個布爾值來指示是否選擇了該值。在每個7上放置一個過濾器以消除該值,如果它被其他任何6選中的話。6 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,但不是肯定的。