Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF Datagrid组合框选项根据另一行值而不同_C#_Wpf - Fatal编程技术网

C# WPF Datagrid组合框选项根据另一行值而不同

C# WPF Datagrid组合框选项根据另一行值而不同,c#,wpf,C#,Wpf,我有一个datagrid,其中ItemsSource在代码隐藏中设置,例如: var grid = grdEmploy as DataGrid; grid.ItemsSource = employments; // list of objects <CollectionViewSource x:Key="StatusList" CollectionViewType="ListCollectionView"/> 在这个网格中,我在编辑行时使用了几个下拉列表。这些选项当前保存在本地

我有一个datagrid,其中ItemsSource在代码隐藏中设置,例如:

var grid = grdEmploy as DataGrid;
grid.ItemsSource = employments; // list of objects
<CollectionViewSource x:Key="StatusList"  CollectionViewType="ListCollectionView"/>
在这个网格中,我在编辑行时使用了几个下拉列表。这些选项当前保存在本地CollectionViewSource中,例如:

var grid = grdEmploy as DataGrid;
grid.ItemsSource = employments; // list of objects
<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中的多个源集合(无论是否经过过滤),恐怕在代码隐藏中定义单个源集合没有多大意义。我建议您将过滤逻辑放在视图模型中。

您能详细说明一下吗?您是否建议如果我有这个“Employee”类,我可以在其中包含一个属性,例如List StatusList{get;set;},将下拉值放在其中而不是源集合中,并将绑定路径更改为该类?然后是过滤get的另一个属性?听起来不错,我唯一可能遇到的问题是我发现这样的属性在编辑后不会更新,即它会在第一次过滤,但在编辑后不会更新。如果不是出于兴趣而收集源代码,那么这样做有什么好处呢?澄清一下,我指的是数据网格编辑,可能是我自己对courseYes的WPF缺乏了解,这就是我的建议。您应该实现INotifyPropertyChanged,并在StatusList属性的setter中引发PropertyChanged事件。然后,每当您将属性设置为新值时,绑定到它的任何UI元素都将得到更新。在视图中使用单一源集合的好处是,您可以使用此方法轻松筛选每个员工的列表。感谢我完成了所有这些工作,但是更新部分仍然是一个问题。如果我更改第一个下拉列表,第二列将不会更新,直到我完全离开该行并再次返回。我已经添加了INotify等。有什么线索或者这应该是一个新问题吗?