C# WPF绑定更新
有人能解释为什么我不能使用new重置绑定数据吗 使用MVVM,数据绑定到列表框 DataList已实现INotifyPropertyChanged 在方法OnChange()中 视图模型C# WPF绑定更新,c#,wpf,mvvm,C#,Wpf,Mvvm,有人能解释为什么我不能使用new重置绑定数据吗 使用MVVM,数据绑定到列表框 DataList已实现INotifyPropertyChanged 在方法OnChange()中 视图模型 ObservableCollection<DataList> data; public ObservableCollection<DataList> Data { get { return data; } set { data = value; } } public V
ObservableCollection<DataList> data;
public ObservableCollection<DataList> Data
{
get { return data; }
set { data = value; }
}
public ViewModel()
{
this.Command_OnChange = new RelayCommand(ExecuteCommand1, CanExecuteCommand);
data = new ObservableCollection<DataList>();
data.Add(new DataList() { Text = "Default 1" });
data.Add(new DataList() { Text = "Default 2" });
}
public void OnChange()
{
data.Add(new DataList() { Text = "Changed 1" });
data.Add(new DataList() { Text = "Changed 2" });
}
可观测采集数据;
公共可观测收集数据
{
获取{返回数据;}
设置{data=value;}
}
公共视图模型()
{
this.Command\u OnChange=new RelayCommand(executecommand 1,CanExecuteCommand);
数据=新的ObservableCollection();
data.Add(newdatalist(){Text=“Default 1”});
data.Add(newdatalist(){Text=“Default 2”});
}
更改后的公共无效()
{
data.Add(newdatalist(){Text=“Changed 1”});
data.Add(newdatalist(){Text=“Changed 2”});
}
因为当您更改备份字段时,wpf无法知道更改
事实上,您可以使用新的ObservableCollection
实例覆盖变量,但您也必须在ViewModel
类中实现INotifyPropertyChanged
private ObservableCollection<DataList> data;
public ObservableCollection<DataList> Data
{
get { return data; }
set
{
data = value;
OnPropertyChanged("Data");
}
}
私有可观测采集数据;
公共可观测收集数据
{
获取{返回数据;}
设置
{
数据=价值;
OnPropertyChanged(“数据”);
}
}
在你的OnChange方法中
public void OnChange()
{
Data = new ObservableCollection<DataList>();//Note the use of Data property not field
Data.Add(new DataList() { Text = "Changed 1" });
Data.Add(new DataList() { Text = "Changed 2" });
}
public void OnChange()
{
Data=newobserveCollection();//注意数据属性not字段的使用
Data.Add(newdatalist(){Text=“Changed 1”});
Data.Add(newdatalist(){Text=“Changed 2”});
}
感谢您的快速回复。我可以通过直接修改数据看到,它触发集合并发出属性更改以查看。在OnChange()方法中使用“数据”而不是“数据”可以吗?@aicu。老实说,没有理由在那里创建新的ObservableCollection
;只需使用数据。清除就足够了。如果您想这样做,则必须使用OnPropertyChanged()
通知更改。但是,使用数据
属性就可以了。没有什么不对的。
private ObservableCollection<DataList> data;
public ObservableCollection<DataList> Data
{
get { return data; }
set
{
data = value;
OnPropertyChanged("Data");
}
}
public void OnChange()
{
Data = new ObservableCollection<DataList>();//Note the use of Data property not field
Data.Add(new DataList() { Text = "Changed 1" });
Data.Add(new DataList() { Text = "Changed 2" });
}