动态分配时,可观察集合刷新不起作用
本文关键字:集合 刷新 不起作用 观察 动态分配 | 更新日期: 2023-09-27 18:34:25
public ObservableCollection<Model.ChildCommand> ChildCommands { get; private set; }
ChildCommands 绑定到数据网格。
两个段都向我显示数据网格中的项目。
但在第一段中,当集合更改时,Datagrid 项不会自动刷新。对于第二段,刷新有效。
第 1 部分:
var childs = from child in m_context.ChildCommand.Local
select child;
this.ChildCommands = new ObservableCollection<Model.ChildCommand>(childs);
第 2 部分:
this.ChildCommands = m_context.ChildCommand.Local;
如何使用第一段获得自动刷新?
段 1 不自动更新的原因是您最终绑定到不同的 ObservableCollection 实例。
当m_context。ChildCommand.Local 更改时,您的段 2 数据网格会收到通知,因为它绑定到该可观察的集合实例。但是,您的段 1 数据网格绑定到不同的可观察集合实例(当您说新的可观察集合(子)时,您自己创建了该实例。
如果你真的希望他们两个都绑定到m_context。ChildCommand.Local 可观察集合,则应这样实现它,而不是为段 1 创建不同的可观察集合实例。
您需要
为 ChildCommands
属性实现INotifyPropertyChanged
,如下所示:
public class YourClass: INotifyPropertyChanged
{
private ObservableCollection<Model.ChildCommand> _childCommands;
public event PropertyChangedEventHandler PropertyChanged;
public ObservableCollection<Model.ChildCommand> ChildCommands
{
get { return _childCommands; }
set
{
_childCommands= value;
OnPropertyChanged("ChildCommands");
}
}
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
有关详细信息,请参阅此处:http://msdn.microsoft.com/en-us/library/ms743695%28v=vs.110%29.aspx
我的解决方案是从 NotificationObject 类继承我的类。
之后,只需使用
this.ChildCommands = m_context.ChildCommand.Local;
RaisePropertyChanged(() => this.ChildCommands); //this line notifies the UI that the underlying property has changed.
如果集合被重新实例化,则不会更新与集合的绑定。您有两种选择:
- 在 ChildCommands 属性上实现 INotifyPropertyChanged
-
而不是做:
这。ChildCommands = new ObservableCollection(childs);
请改为执行以下操作:
this.ChildCommands.Clear();
foreach(var child in childs)
this.ChildCommands.Add(child);