C# 在模型中出现错误时与ViewModel通信
我有一个使用MVVM模式的应用程序,我希望在用户填写信息时实现验证。例如,如果最小值大于最大值,我想禁用视图中的按钮C# 在模型中出现错误时与ViewModel通信,c#,wpf,validation,mvvm,C#,Wpf,Validation,Mvvm,我有一个使用MVVM模式的应用程序,我希望在用户填写信息时实现验证。例如,如果最小值大于最大值,我想禁用视图中的按钮 public class MyViewModel : INotifyPropertyChanged { private ObservableCollection<MyModel> stocks; public ObservableCollection<MyModel> Stocks { get { return st
public class MyViewModel : INotifyPropertyChanged
{
private ObservableCollection<MyModel> stocks;
public ObservableCollection<MyModel> Stocks
{
get { return stocks; }
set { stocks = value; }
}
private bool canUpdate = true;
public bool CanUpdate
{
get { return canUpdate; }
set { canUpdate = value; }
}
public MyViewModel()
{
AddStocks();
}
public void AddStocks()
{
Stocks = new ObservableCollection<MyModel>();
Stocks.Add(new MyModel() { Stock ="Stock 1", Min = 10, Max=20 });
Stocks.Add(new MyModel() { Stock = "Stock 2", Min = 5, Max = 15 });
Stocks.Add(new MyModel() { Stock = "Stock 3", Min = 6, Max = 25 });
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChange(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
我已经在模型中实现了IDataErrorInfo。这是我的模型:
public class MyModel : IDataErrorInfo, INotifyPropertyChanged
{
private string stock;
public string Stock
{
get { return stock; }
set { stock = value; }
}
private double min;
public double Min
{
get { return min; }
set { min = value; OnPropertyChange("Min"); }
}
private double max;
public double Max
{
get { return max; }
set { max = value; OnPropertyChange("Max"); }
}
public string Error
{
get { throw new NotImplementedException(); }
}
public string this[string columnName]
{
get
{
string error = string.Empty;
if (columnName == "Min" || columnName == "Max")
{
if (Min > Max)
{
error = "Min can't be greater than Max";
}
}
return error;
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChange(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
}
我的ViewModel有一个MyModel集合(绑定到DataGrid)和一个名为CanUpdate的布尔属性。此CanUpdate绑定到我的视图中更新按钮的IsEnabled属性
public class MyViewModel : INotifyPropertyChanged
{
private ObservableCollection<MyModel> stocks;
public ObservableCollection<MyModel> Stocks
{
get { return stocks; }
set { stocks = value; }
}
private bool canUpdate = true;
public bool CanUpdate
{
get { return canUpdate; }
set { canUpdate = value; }
}
public MyViewModel()
{
AddStocks();
}
public void AddStocks()
{
Stocks = new ObservableCollection<MyModel>();
Stocks.Add(new MyModel() { Stock ="Stock 1", Min = 10, Max=20 });
Stocks.Add(new MyModel() { Stock = "Stock 2", Min = 5, Max = 15 });
Stocks.Add(new MyModel() { Stock = "Stock 3", Min = 6, Max = 25 });
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChange(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
公共类MyViewModel:INotifyPropertyChanged
{
私人可观测集合股票;
公开募股
{
获取{返回股票;}
设置{stocks=value;}
}
private bool canUpdate=true;
公共图书馆更新
{
获取{return canUpdate;}
设置{canUpdate=value;}
}
公共MyViewModel()
{
AddStocks();
}
公开发行股票()
{
股票=新的可观察集合();
添加(新的MyModel(){Stock=“Stock 1”,最小值=10,最大值=20});
添加(新的MyModel(){Stock=“Stock 2”,最小值=5,最大值=15});
添加(新的MyModel(){Stock=“Stock 3”,Min=6,Max=25});
}
公共事件属性更改事件处理程序属性更改;
公共void OnPropertyChange(字符串名称)
{
if(PropertyChanged!=null)
{
PropertyChanged(此,新PropertyChangedEventArgs(名称));
}
}
用户可以从DataGrid编辑最小值和最大值。每当MyModel中出现错误时进行编辑时,必须更新MyViewModel中的CanUpdate属性。请指导我实现这一点。在视图模型中,将项目添加到其
PropertyChanged
事件的集合挂钩时。在处理程序中分析错误属性和修改可以相应地更新