C# 当CellEditingTemplate DataTemplate控件更改其绑定值时,如何更新CellTemplate DataTemplate控件?

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

我的DataGrid中有一个模板列,如下所示:

<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>