C# WPF绑定更新

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

有人能解释为什么我不能使用new重置绑定数据吗

使用MVVM,数据绑定到列表框

DataList已实现INotifyPropertyChanged

在方法OnChange()中

视图模型

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" });
}