【问题标题】:wpf toolkit, datagrid, comboboxcolumnwpf 工具包、数据网格、组合框列
【发布时间】:2010-12-06 05:49:33
【问题描述】:

在数据网格中,我有两个 DataGridComboBoxColumns。其中一列的项目应取决于在另一列中选择的内容。用于建模的底层集合是dictionary<string,List<string>>. 我应该如何实现这个?我似乎无法连接到列上的任何相关事件,也找不到任何支持这一点的数据绑定方案..

【问题讨论】:

    标签: wpf datagrid wpftoolkit datagridcomboboxcolumn


    【解决方案1】:

    前段时间我也遇到过同样的情况,然后将其修复如下:

      public class DataItem : INotifyPropertyChanged {
      ...
    
      public List<SomeObject> DisplayableComboBoxItems { 
        get; set;
    }
    
    private static Dictionary<int, List<SomeObject>> myDict;    
    
    public Dictionary<int, List<SomeObject>> MyDict {
        get {
            if (myDict == null) {
                myDict = GetYourDataFromSomewhere();
            }
            return myDict;
        }
    }
    
    public int TypeId {
        get { return typeId; }
        set {
            if (value == typeId) return;
            typeId = value;
            RaisePropertyChanged("TypeId");
        }
    }
    
    public int TypeSetId {
        get { return typeSetId; }
        set {
            if (typeSetId == value) return;         
            typeSetId = value;
            RaisePropertyChanged("TypeSetId");
            DisplayableComboBoxItems = MyDict[typeSetId];
            RaisePropertyChanged("DisplayableComboBoxItems");
            TypeId = 0;                
        }
    }
    ...
    }
    

    DataItem 是绑定到 DataRow 的对象。 这只是代码的一个小模型。基本上,每当 TypeSet 发生变化时,我都需要显示一个新的类型列表。我只使用了一个静态列表,在这个例子中我使用了一个字典。
    通过此设置,您可以将组合框 ItemsSource 绑定到“DisplayableComboBoxItems”,并将 SelectedValue 绑定到“TypeId”。 您将需要其他属性来显示正确的文本,而不是 TypeId。
    这样做的缺点是,当您拥有 1000 多个项目时,您将拥有所有项目的相同列表。但我的情况并非如此(DataGrid 最多显示 50 个项目)。

    我希望这足够清楚,它可以帮助您朝着正确的方向前进!

    干杯!
    罗尔

    【讨论】:

    • 感谢 Roel 的回答,非常有帮助,但我最终寻求了不同的解决方案。
    【解决方案2】:

    我没有使用 DataGridComboBoxColumn 作为第二列,而是使用带有嵌入式 Combobox 的 DataGridTemplateColumn。对于 itemsource,我定义了一个转换器:string -&gt; List&lt;string&gt;。转换器将另一个DataGridComboBox(绑定到Navn)的selecteditem的值翻译成List&lt;string&gt;,这只是一个字典查找。

    像这样:

    <my:DataGridTemplateColumn>
                    <my:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox  SelectedItem="{Binding Værdi}" 
                                        ItemsSource="{Binding Navn,  Converter={StaticResource dimensionToValues}}"
                                       > 
                            </ComboBox>
                        </DataTemplate>
                    </my:DataGridTemplateColumn.CellTemplate>
                </my:DataGridTemplateColumn>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 2010-12-13
      • 1970-01-01
      • 2010-11-26
      • 2021-06-16
      • 2018-06-27
      相关资源
      最近更新 更多