1

我有一个模型DataGrid列表。模型有一个属性JobJobJobName

我可以知道何时选择了一行,因为SelectedItem设置了网格,但是当用户更改网格中的某些数据时,我想在视图模型中做一些事情。

当用户更改JobName网格中的活动行时,视图模型如何知道呢?

4

3 回答 3

1

如果有两种绑定方式,将调用 JobModel 实例的 JobName 属性设置器。如果 setter 引发 PropertyChanged 事件,您可以通过在所选项目更改时注册和取消注册处理程序来处理 ViewModel 中的该事件。

于 2013-09-24T15:18:21.310 回答
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));
        }
    }
}
于 2013-09-24T15:53:18.943 回答
1

你的JobName财产应该是这样的:

public string JobName
{
    get { return _jobName; }
    set
    {
        _jobName = value;
        this.OnPropertyChanged("JobName");
    }
}

当用户更改数据网格时,将调用设置器,您可以在那里添加一些逻辑。绑定应该TwoWay(默认情况下)才能正常工作。

如果您需要监听视图模型中的属性更改,一种简单的方法是在构造函数中添加它:

jobModel.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(JobModel_PropertyChanged);

然后在该JobModel_PropertyChanged方法中,您可以检查哪些属性已更改并做出反应。

于 2013-09-24T15:23:00.623 回答