我有一个模型DataGrid
列表。模型有一个属性Job
。Job
JobName
我可以知道何时选择了一行,因为SelectedItem
设置了网格,但是当用户更改网格中的某些数据时,我想在视图模型中做一些事情。
当用户更改JobName
网格中的活动行时,视图模型如何知道呢?
如果有两种绑定方式,将调用 JobModel 实例的 JobName 属性设置器。如果 setter 引发 PropertyChanged 事件,您可以通过在所选项目更改时注册和取消注册处理程序来处理 ViewModel 中的该事件。
让你的模型实现INotifyPropertyChanged
。然后,当您从 DAL 填写作业列表时,使用您的 propertyChanged 事件处理程序注册您的模型项
查看模型类:
public class JobsViewModel
{
public List<Job> Jobs { get; set; }
public JobsViewModel()
{
//Get your list of items and add your handler method for each item that is added
Jobs = new List<Job>();
Job job = new Job("Joe");
job.PropertyChanged += job_PropertyChanged;
Jobs.Add(job);
}
private void job_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
//Do stuff with job here
}
}
工作类别:
public class Job : INotifyPropertyChanged
{
private string _jobName;
public string JobName
{
get { return _jobName; }
set
{
_jobName = value;
OnPropertyChanged("JobName");
}
}
public Job(string jobName)
{
JobName = jobName;
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
你的JobName
财产应该是这样的:
public string JobName
{
get { return _jobName; }
set
{
_jobName = value;
this.OnPropertyChanged("JobName");
}
}
当用户更改数据网格时,将调用设置器,您可以在那里添加一些逻辑。绑定应该TwoWay
(默认情况下)才能正常工作。
如果您需要监听视图模型中的属性更改,一种简单的方法是在构造函数中添加它:
jobModel.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(JobModel_PropertyChanged);
然后在该JobModel_PropertyChanged
方法中,您可以检查哪些属性已更改并做出反应。