我有一个对象 DataSet,它具有 name 属性和 ID 属性。我的视图模型中有一个数据集列表,它应该是 DataGrid Combobox 列的 itemsource。我已定义绑定如下:
dataGridControl:DataGridComboBoxColumn
Binding="{Binding DataSetIndex}"
Header="DataSet"
ItemsSource="{x:Bind Model.DataSets}"
DisplayMemberPath="Name"
Tag="DataSet" />
现在,这可以正常工作,除了我需要以某种方式告诉绑定它应该使用 DataSet.ID 属性。因此,当用户在组合框中选择一个值时,绑定 DataSetIndex 应该设置为 int,即 DataSet.ID 属性。我如何在绑定中执行此操作?现在我当然会收到一条错误消息,提示 itemsource 没有 int 属性,因为它试图将 DataSet 对象作为一个整体使用。现在,社区工具包中没有 SelectedValuePath 吗?我必须使用 templatecolumn 吗?
这是我根据您的解决方案更新的问题。它还具有代码隐藏绑定。
<dataGridControl:DataGridTemplateColumn Header="DataSet">
<dataGridControl:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate x:DataType="local:DataExtractionSetupViewModel">
<ComboBox x:Name="dataSetsComboBox" Loaded="ComboBox_Loaded"
DisplayMemberPath="Name"
SelectedValue="{Binding DataSetIndex, Mode=TwoWay}" SelectedValuePath="ID" IsDropDownOpen="True"/>
</DataTemplate>
</dataGridControl:DataGridTemplateColumn.CellEditingTemplate>
<dataGridControl:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding DatasetIndex}"/>
</DataTemplate>
</dataGridControl:DataGridTemplateColumn.CellTemplate>
</dataGridControl:DataGridTemplateColumn>
现在我唯一的问题是,我们如何才能使这个自定义模板列看起来与普通的数据网格组合框列完全一样,并且在文本框中显示数据集名称而不是索引?