2009-10-13 67 views
0

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

回答

0

对于第二列,我没有使用DataGridComboBoxColumn,而是使用了带有嵌入式Combobox的DataGridTemplateColumn。对于itemsource我定义了一个转换器:string -> List<string>。该转换器转换的另一DataGridComboBox(这势必Navn)的selectedItem属性的值存入List<string>,这仅仅是一个字典查找。

像这样:

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

我有同样的情形而回,并固定它像这样:

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

+0

感谢答案罗埃尔,非常有帮助的,但是我最终追求不同的解决方案。 – fsl 2009-10-14 11:49:14

相关问题