2016-12-19 1 views
0

я буду стараться упростить как можно так:Refresh и Оповещать о связанных коллекции изменений

Я следующий EF6 объект:

public class ParentObject 
{ 
    ICollection<ChildObject> Children {get; set ;} 
} 

У меня есть ViewModel где

ObservableCollection<ParentObject> ParentCollection { get; set; } 
ParentObject SelectedParent { get; set; } 
ChildObject SelectedChild { get; set; } 

Также у меня есть два вида ListViews

<ListView Name="lvParents" Margin="5,5,0,5" Grid.Row="1" Grid.Column="0" ItemsSource="{Binding Path=ParentCollection}" SelectedItem="{Binding Path=SelectedParent}"> 


<ListView Name="lvChildren" Margin="5,5,0,5" Grid.Row="1" Grid.Column="0" ItemsSource="{Binding Path=SelectedParent.Children}" SelectedItem="{Binding Path=SelectedChild}"> 

Все объекты EF6 имеют реализованный INotifyPropertyChanged, Также в моей модели ViewModel реализована INotifyPropertyChanged.

Все работает хорошо, если я меняю выбранный элемент в lvParents. Дети в lvChildren меняются.

После того, как я уничтожаю детей, я не могу обновить детей: (элемент удаляется из базы данных, но не может обновить только lvChildren

Вот метод, который я пытался использовать:.

_dataContext.ChildrenObjects.Remove(SelectedChild); 
_dataContext.SaveChanges(); 
SelectedParent.Children.Remove(SelectedChild); 

//here the SelectedParent does not contain the value I removed but no way how to refresh the ItemsSource of lvChildren. 

NotifyPropertyChanged("SelectedChild"); 
NotifyPropertyChanged("SelectedParent.Children"); 
NotifyPropertyChanged("ParentCollection"); 

Мои вопрос в том, каков правильный способ привязать зависящие (связанные) коллекции и обновить их после их изменения. Нужно ли мне перегружать ICollection EF6 и создать свой собственный ObservableCollection? Достаточно ли этого?

ответ

0

Мой вопрос в том, что является правильным способом привязать зависящие (связанные) коллекции и обновить их после их изменения?

Детский свойство ParentObject должен возвращать ObservableCollection:

public class ParentObject 
{ 
    ObservableCollection<ChildObject> Children {get; set ;} 
} 

Тогда ItemsSource будет автоматически обновляться при удалении элемента из коллекции:

SelectedParent.Children.Remove(SelectedChild); 

Это было бы самый «правильный» способ реализации этого в соответствии с шаблоном проектирования MVVM.

Использование и привязка к автоматически сгенерированным объектам типа «как есть» редко является хорошей идеей в WPF. Вы должны привязать к ObservableCollection <T> свойствам, а не ICollection <T>, если вы хотите иметь возможность динамически изменять свои коллекции во время выполнения.

+0

Спасибо за ответ. (ICollection) генерируется EF6 для связанных связанных объектов в отношениях. –

+0

Я знаю. И свойства ICollection не являются «дружественными» WPF. – mm8