2015-02-26 16 views
0

У меня есть наблюдаемый набор, содержащий несколько моделей viewModels, которые привязаны к каждой модели сущности. ViewModel дополнительно содержит несколько вычисляемых текстовых значений:Зарегистрировать изменения в модификациях ViewModel on Entity

public class SampleViewModel : NotificationObject 
{ 
    private Entity _myModel; 
    public Entity Model 
    { 
     get; 
     private set; 
    } 

    public string HasEntries 
    { 
     get 
     { 
      if(Model.Entries.Count > 0) 
       return "Model has Entries"; 
      else 
       return "Model has no Entries"; 
     } 
    } 

Как я теперь сообщить ViewModel и ObservableCollection в представлении о том, что HasEntries-недвижимости изменилась, когда модель обновляется?

sampleViewModel.Model.Entries.Add(entry); 

Edit:

Для уточнения: я иногда добавить запись в модели, просто установив ссылку на вход-объекта:

private void addEntry(){ 
    Entry t = new Entry(); 
    t.IDModel = sampleViewModel.Model.ID; 
    dataAccessLayer.AddEntry(t); 
} 

Все это происходит в том же контексте и поэтому объект появится в sampleViewModel. Мне просто нужно найти способ поймать это событие и уведомить viewModel о недавно добавленном объекте.

ответ

0

Я нашел довольно простое решение. Как оказалось, каждый объект автоматически создает свойствоChanged-Event, когда свойство изменяется. Все, что я должен был сделать, чтобы связать PropertyChanged-Случай модели к ViewModel:

Model.PropertyChanged += Model_PropertyChanged; 

И в моем конкретном случае, потому что это коллекция:

Model.Entries.AssociationChanged += ModelEntries_PropertyChanged; 

protected void ModelEntries_PropertyChanged(object sender, CollectionChangedEventArgs) 
{ 
    RaisePropertyChanged(() => this.HasEntries); 
} 
0

Вместо того чтобы подвергать вашу модель напрямую, почему бы просто не создать метод, который добавляет записи и уведомления об изменениях в одном.

public class SampleViewModel : NotificationObject 
{ 
    private Entity Model {get;set;} 

    public string HasEntries 
    { 
     get 
     { 
      if(Model.Entries.Count > 0) 
       return "Model has Entries"; 
      else 
       return "Model has no Entries"; 
     } 
    } 
    public void AddEntry(Entry entry) 
    { 
     Model.Entries.Add(entry); 
     //Execute you nofity property changed 
     NotifyPropertyChanged("HasEntries"); 
    } 
} 

Тогда

sampleViewModel.AddEntry(entry); 
+0

Иногда я добавить записи косвенно с помощью ссылки Модель по его идентификатору в других объектах. Например, я добавляю запись в объект, устанавливая ссылку на объект в записи. Поскольку все это происходит в том же контексте, модель будет обновляться с новой ссылкой. – narain