首页 > 解决方案 > WPF Datagrid ComboBox 选项因另一行值而异

问题描述

我有一个数据网格,其中 ItemsSource 在代码隐藏中设置,例如:

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#wpf

解决方案


使用 MVVM 模式解决此问题的方法是在Employee类中定义一个集合属性,或者您调用它的任何内容,然后根据绑定到“列 A”的属性值从该属性返回一个已过滤的集合。

如果您想在DataGrid. 我建议您将过滤逻辑放在视图模型中。


推荐阅读