C# 当CellEditingTemplate DataTemplate控件更改其绑定值时,如何更新CellTemplate DataTemplate控件?
我的DataGrid中有一个模板列,如下所示:C# 当CellEditingTemplate DataTemplate控件更改其绑定值时,如何更新CellTemplate DataTemplate控件?,c#,wpf,wpfdatagrid,datatemplate,datagridtemplatecolumn,C#,Wpf,Wpfdatagrid,Datatemplate,Datagridtemplatecolumn,我的DataGrid中有一个模板列,如下所示: <DataGridTemplateColumn> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Item}" /> </DataTemplate> </DataGridTemplateColumn.Ce
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Item}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox
DisplayMemberPath="Item"
Header="Item"
ItemsSource="{Binding Data.AssetDescriptions, Source={StaticResource proxy}}"
SelectedValueBinding="{Binding AssetDescriptionID}"
SelectedValuePath="AssetDescriptionID" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
数据网格本身绑定到ObservableCollection Assets
属性,其中Asset
包含资产描述ID
和项
(描述)。为此,我将Assets表连接到AssetDescriptions表,如下所示:
var assets = _conn.Query<Asset>(
@"SELECT A.AssetDescriptionID, D.Item
FROM Assets A
JOIN AssetDescriptions D
ON D.AssetDescriptionID = A.AssetDescriptionID");
Assets = new ObservableCollection<Asset>(assets);
var资产=\u conn.Query(
@“选择A.AssetDescriptionID,D.项目
从资产A
连接资产说明D
在D.AssetDescriptionID=A.AssetDescriptionID“)上;
资产=新的可观测集合(资产);
这一切都能很好地工作,除了当在组合框中选择新值时,cellmetplate
DataTemplate
中的TextBlock
不会更新为新描述
如何实现这一点?问题是您只绑定到
资产的AssetDescriptionID
-属性。
Item
将永远不会被触摸(您的CellTemplate
绑定到该项)
选项1:
尝试使用DataGridComboxColumn
而不是DataGridTemplateColumn
然后不再需要项目
(在资产
上)
<DataGridComboBoxColumn
DisplayMemberPath="Item"
Header="Item"
ItemsSource="{Binding Data.AssetDescriptions, Source={StaticResource proxy}}"
SelectedValueBinding="{Binding AssetDescriptionID}"
SelectedValuePath="AssetDescriptionID">
</DataGridComboBoxColumn>
您的CellEditingTemplate
也可以
class Asset
{
...
public AssetDescription AssetDescription {get;set;}
...
}
<DataTemplate>
<ComboBox
DisplayMemberPath="Item"
ItemsSource="{Binding Data.AssetDescriptions, Source={StaticResource proxy}}"
SelectedItem="{Binding AssetDescription }" />
</DataTemplate>
<TextBlock Text="{Binding AssetDescription.Item}" />
编辑:
您还可以对选项2使用DataGridComboxColumn
<DataGridComboBoxColumn
DisplayMemberPath="Item"
Header="Item"
ItemsSource="{Binding Data.AssetDescriptions, Source={StaticResource proxy}}"
SelectedItemBinding="{Binding AssetDescription}">
</DataGridComboBoxColumn>
我喜欢选项二。
<TextBlock Text="{Binding AssetDescription.Item}" />
<DataGridComboBoxColumn
DisplayMemberPath="Item"
Header="Item"
ItemsSource="{Binding Data.AssetDescriptions, Source={StaticResource proxy}}"
SelectedItemBinding="{Binding AssetDescription}">
</DataGridComboBoxColumn>