c# - 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 等。
我的想法是将所有选项加载到本地列表中并以某种方式过滤它们,但我不确定如何最好地做到这一点,对此的任何帮助将不胜感激。
解决方案
使用 MVVM 模式解决此问题的方法是在Employee
类中定义一个集合属性,或者您调用它的任何内容,然后根据绑定到“列 A”的属性值从该属性返回一个已过滤的集合。
如果您想在DataGrid
. 我建议您将过滤逻辑放在视图模型中。
推荐阅读
- r - 使用向量从列中提取子集
- google-cloud-platform - GCP 数据流错误:路径“gs://...”不是有效的文件模式。模式必须采用“gs://”形式
/路径/到/文件” - r - 循环后输出最小值
- php - Mailchimp api v1.3 返回 HTTP/1.0 302 暂时移动
- javascript - 升级到 0.56 后的 React-Native Shadow
- javascript - 如何比较 Vuejs 中的日期?
- git - 检查“远程”是否确实是 git 远程
- javascript - Javascript切换工作但显示无样式菜单
- r - R在数据框的子集上应用函数
- javascript - 将“...”放在可滚动容器的末尾,但仅当滚动位于顶部时