2013-09-24 4 views
1

У меня есть DataGrid, связанный со списком Job Модели. Модель Job имеет JobName.WPF MVVM Определить, когда элемент в коллекции на изменения модели

Я могу сказать, когда выбрана строка, потому что установлена ​​сетка SelectedItem, но когда пользователь меняет некоторые данные в сетке, я хотел бы сделать некоторые вещи в модели представления.

Когда пользователь меняет JobName на активную строку в сетке, как о ней может знать модель просмотра?

+3

Добавление очень краткое описание кода здесь может сделать многое, чтобы упростить вопрос. –

ответ

1

Если есть двусторонняя привязка, будет активирован атрибут свойства JobName экземпляра JobModel. Если сеттер вызывает событие PropertyChanged, вы можете обработать это событие в ViewModel, зарегистрировав и отменив регистрацию обработчика при изменении выбранного элемента.

1

Ваше JobName свойство должно что-то вроде:

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

Когда пользователь изменяет ему DataGrid, сеттер будет называться, и вы можете добавить некоторую логику там. Для этого должно быть TwoWay (как по умолчанию).

Если вам нужно слушать изменения свойств в вашей ViewModel, легкий способ добавить это в конструкторе:

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

Затем в методе JobModel_PropertyChanged вы можете проверить, какое свойство изменилось и реагировать.

+0

ОК, но где/как в модели просмотра я обнаружил изменение свойства? – CoderForHire

+0

Это не поможет, потому что это позволяет сетке получать уведомления об изменениях в модели, а не о модели, получающей уведомления от модели. – Shoe

+0

Я думаю, что я хочу, чтобы он обрабатывал событие Job_PropertyChanged в виртуальной машине. Но Джобс возвращается из DAL, поэтому где/как я подключаю обработчик событий в VM? – CoderForHire

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)); 
     } 
    } 
} 
+0

Спасибо, что указали мою ошибку. – bland

Смежные вопросы