![](/img/trans.png)
[英]WPF change datagrid combobox ItemsSource to value of another datagrid combox
[英]WPF Datagrid ComboBox options different based on another row value
我有一個數據網格,其中 ItemsSource 在代碼隱藏中設置,例如:
var grid = grdEmploy as DataGrid;
grid.ItemsSource = employments; // list of objects
在這個網格中,我在編輯行時使用了幾個下拉菜單。 這些選項當前保存在本地 CollectionViewSource 中,例如:
<CollectionViewSource x:Key="StatusList" CollectionViewType="ListCollectionView"/>
並設置 window 的加載時間,如下所示:
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
class 中定義一個集合屬性,或者您所稱的任何名稱,然后根據綁定到“列 A”的屬性的值從該屬性返回一個已過濾的集合.
如果您想綁定到DataGrid
中的多個源 collections(過濾與否),恐怕在代碼隱藏中定義單個源集合沒有多大意義。 我建議您將過濾邏輯放在 model 視圖中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.