gpt4 book ai didi

c# - Datagrid RowDetails 未更新

转载 作者:行者123 更新时间:2023-11-30 12:48:52 27 4
gpt4 key购买 nike

在修改 DataGrid 绑定(bind)到的集合(“Items”)时,我无法更新 RowDetailsTemplate。正在从 View 模型中修改集合。当我修改其中一个绑定(bind)项的 contents 时,更改会在 DataGridRow 和 RowDetailsTemplate 中更新。例如

Items[i].Name = "new name";  // RowDetailsTemplate gets updated

但是 如果我将其中一项分配给一个全新的对象,DataGridRow 会更新,但 RowDetailsTemplate 不会更新。例如

Items[i] = new Model {Name = "new name"};  // RowDetailsTemplate NOT updated

起初我唯一想到的是,我需要为绑定(bind)项的 CollectionChanged 事件添加一个监听器,并显式引发属性更改通知。例如

Items = new ObeservableCollection<Model>();
Items.CollectionChanged += (o,e) => OnNotifyPropertyChanged("Items");

但这没有用。

我的 XAML 绑定(bind)如下所示:

<DataGrid DataContext="{StaticResource viewmodel}" 
ItemsSource="{Binding Items, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True, NotifyOnSourceUpdated=True}">
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True, NotifyOnSourceUpdated=True}"/>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>

为什么 DataGridRow 通知了更改的 Item 而不是 RowDetailsTemplate?!

更新执行删除/添加而不是修改集合。例如

Items.Remove(Items[i]);
Items.Add (new Model {Name = "new name"}); // RowDetailsTemplate updated OK

(哦,模型类当然实现了 INotifyPropertyChanged。)

这似乎是我需要刷新详细信息 View 的 DataContext 的问题?

最佳答案

为什么你不能:

Items.RemoveAt(i);
Items.Insert(i,(new Model {Name = "new name"});

效果一样。

关于c# - Datagrid RowDetails 未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13278040/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com