簡體   English   中英

WPF Datagrid ComboBox 選項因另一行值而異

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM