WPF множественная связь со списком - PullRequest
1 голос
/ 08 декабря 2011

Я работаю над приложением 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;
    }          
}

То, чего я хочу достичь, это если пользовательзначение выбора в одном из полей со списком, оно не должно появляться в других полях со списком.Если пользователь выбирает какое-то другое значение в том же комбинированном окне, ранее выбранное значение должно появиться в других комбинированных окнах для выбора.Пожалуйста, ведите меня.

Спасибо, Приянк

1 Ответ

1 голос
/ 08 декабря 2011

То, что я хотел бы сделать, это перейти к GridView ListView, и один столбец - это имя, которое будет доступно всем. Затем укажите логическое значение для каждого из 7, чтобы указать, выбрано ли это значение. Поместите фильтр на каждую цифру 7, чтобы исключить значение, если оно выбрано любым другим 6. В ExcelColumnames необходимо указать ObservableCollection. Фильтрацию см. http://msdn.microsoft.com/en-us/library/ms752348.aspx.. Вам может понадобиться один фильтр и передать ему идентификатор, чтобы он знал, как просматривать все остальные.

Другой подход - это один список для всех имен ExcelColumnanames, который имеет 7 свойств bool. Затем создайте 7 ObservableCollections из списка и используйте Linq для фильтрации в .where. В этом случае мастер - это определенно List, а не ObservableCollection, поскольку связать ObservableCollection со списком довольно просто (просто передайте List в конструкторе), но связать ObservableCollection с ObservableCollection нет. Я почти уверен, что вы можете передать List с Linq в конструкторе, но не положительно.

...