Jea*_*rin 2 c# data-binding silverlight events mvvm
我的ViewModel包含一个List<string> SelectedActions和一个方法AddSelectedAction(string addMe)
如果我有以下代码,GUI在调用方法时不会更新:
SelectedActions.Add(addMe);
OnPropertyChanged("SelectedActions");
Run Code Online (Sandbox Code Playgroud)
但如果我使用它,那么它的工作原理:
SelectedActions.Add(addMe);
List<string> li = new List<string>();
foreach (string st in SelectedActions)
li.Add(st);
SelectedActions = li;
OnPropertyChanged("SelectedActions");
Run Code Online (Sandbox Code Playgroud)
我在哪里有以下效用函数
protected void OnPropertyChanged(string propertyName)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
Run Code Online (Sandbox Code Playgroud)
除了实现INotifyPropertyChanged
Note我发布的代码有效,如果我删除了OnPropertyChanged调用,所以我知道它至少在做某事
我建议改变你List<string>的ObservableCollection<string>.这是存储在更新/更改时需要通知的集合的标准/推荐方式.
这将为您处理所有更改通知,您无需显式调用 OnPropertyChange()
那是因为给出的对象SelectedActions正在进行小的优化.你告诉它属性已经改变了,但它快速调用了Equals()并发现它仍然是同一个对象,所以它会短路更新值.当您为SelectedActions分配新列表时,控件会看到它是一个全新的对象,因此会进行更新.
最简单的解决方法是使用一个ObservableCollection实现的INotifyCollectionChanged,这是用于处理这种情况的接口.
| 归档时间: |
|
| 查看次数: |
2719 次 |
| 最近记录: |