Опции ComboBox WPF Datagrid отличаются в зависимости от значения другой строки - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть сетка данных, в которой ItemSource установлен в code-behind, например:

var grid = grdEmploy as DataGrid;
grid.ItemsSource = employments; // list of objects

В этой сетке у меня есть несколько раскрывающихся списков, используемых при редактировании строки. В настоящее время параметры хранятся в локальном CollectionViewSource, например:

<CollectionViewSource x:Key="StatusList"  CollectionViewType="ListCollectionView"/>

и устанавливаются при загрузке окна следующим образом:

var statusList= Functions.GetStatuses(); // returns a List<> 
CollectionViewSource itemCollectionViewSource;
itemCollectionViewSource = (CollectionViewSource)(FindResource("StatusList"));
itemCollectionViewSource.Source = statusList;

Затем выполняется привязка столбца к сетке. выглядело бы так:

<DataGridTemplateColumn Header="Employment Status" HeaderStyle="{StaticResource WrappedColumnHeaderStyle}">
                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBlock>
                                            <TextBlock.Text>
                                                <MultiBinding>
                                                    <MultiBinding.Converter>
                                                        <local:AimTypeConverter />
                                                    </MultiBinding.Converter>
                                                    <Binding Path="EmpStat" />
                                                    <Binding Path="SourceCollection" Source="{StaticResource StatusList}" />
                                                </MultiBinding>
                                            </TextBlock.Text>
                                        </TextBlock>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                                <DataGridTemplateColumn.CellEditingTemplate>
                                    <DataTemplate>
                                        <ComboBox SelectedValue="{Binding EmpStat}" SelectedValuePath="Value" DisplayMemberPath="Text" ItemsSource="{Binding Source={StaticResource StatusList}}"></ComboBox>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellEditingTemplate>
                            </DataGridTemplateColumn>

Все это прекрасно работает, однако я столкнулся с проблемой, из-за которой в одном из столбцов должны отображаться различные параметры, основанные на другом столбце. Например, если в столбце A указано «1», отобразите «Параметры 2,3», если «2», укажите «Параметры 3,4» и т.д. c.

. Мои мысли заключались в том, чтобы загрузить все параметры в локальный список и каким-то образом отфильтровать их, но я не уверен, как лучше это сделать, любая помощь по этому вопросу будет оценена.

1 Ответ

1 голос
/ 08 апреля 2020

Способ решения этой проблемы с использованием шаблона MVVM состоит в том, чтобы определить свойство коллекции в классе Employee или как вы его называете, а затем вернуть уже отфильтрованную коллекцию из этого свойства на основе значения привязанного свойства в «столбец A».

Боюсь, не имеет смысла определять одну исходную коллекцию в коде, если вы хотите привязать несколько исходных коллекций, отфильтрованных или нет, в DataGrid. Я бы порекомендовал вам поместить свою фильтрующую логику c в модель представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...