我有一个DataGrid
绑定到Job
模型列表。 Job
模型具有JobName
属性。
我可以判断何时选择了一行,因为设置了网格SelectedItem
,但是当用户更改网格中的某些数据时,我想在视图模型中做一些事情。
当用户更改网格中活动行的JobName
时,View Model如何知道它?
答案 0 :(得分:1)
如果存在双向绑定,则将调用JobModel实例的JobName属性setter。如果setter引发了PropertyChanged事件,则可以通过在所选项更改时注册和取消注册处理程序来处理ViewModel中的该事件。
答案 1 :(得分:1)
您的JobName
属性应该是这样的:
public string JobName
{
get { return _jobName; }
set
{
_jobName = value;
this.OnPropertyChanged("JobName");
}
}
当用户将其更改为datagrid时,将调用setter并在那里添加一些逻辑。绑定应为TwoWay
(默认情况下),以便工作。
如果您需要在viewmodel中监听属性更改,一种简单的方法是在构造函数中添加它:
jobModel.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(JobModel_PropertyChanged);
然后在JobModel_PropertyChanged
方法中,您可以检查哪个属性已更改并做出反应。
答案 2 :(得分:1)
让您的模型实现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));
}
}
}