Связывание ContextMenu на плоской ViewModel - PullRequest
0 голосов
/ 02 сентября 2010

предположим, что следующие классы:

public class Model
{
    public ObservableCollection<A> Items { get; set; }
}

public class A
{
    ObservableCollection<B> Data { get; set; }

    //... some more properties
}

public class B
{
    //..properties
}

Модель привязана к RibbonMenu и должна также использоваться в контекстном меню. Контекстное меню должно быть привязано ко всем элементам класса B в модели. Изменения в модели (добавление новых элементов, удаление элементов, изменение элементов ...) должны изменить как контекстное меню, так и RibbonMenu.

RibbonMenu работает хорошо, но как связать контекстное меню без создания отдельной модели?

1 Ответ

0 голосов
/ 03 сентября 2010

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

Так, например, в модели у вас есть частный покровитель ObservableCollection<A>. Затем у вас есть общедоступный ObservableCollection<A>, который просто возвращает частного покровителя для привязки ленты.

Затем также есть общедоступный ObservableCollection<B>, который делает все, что ему нужно, в своем геттере, чтобы вернуть то, что вы хотите для контекстного меню. Например, если вы хотите, чтобы отдельные B были одинаковыми во всех As, пусть получатель сделает запрос ко всем B, чтобы вернуть правильный список.

Наконец, чтобы сообщить, что в Model были внесены изменения, внедрите INotifyPropertyChanged и вызовите событие PropertyChanged в установщиках ваших открытых членов.

...