Имеется (c# wpf) окно, в котором динамически показываются разные контролы (фреймы). Набор показываемых контролов определяется в главной vm. Каждый контрол отвечает за работу с отдельным API. В окне может быть несколько контролов одного типа. Данные между разными контролами (в т.ч. одного типа) не пересекаются. Главное окно (vm) отвечают только за состояние (show/hide) контролов.
Между собой контролы по данным не пересекаются. Набор и количество контролов фиксированы. Динамического создания и размещения не происходит.
Вопрос где размещать vm данные для контролов.
Вариант 1: Все в одной vm. Тогда как описать массив контролов одного вида?
Вариант 2: Для каждого контрола своя полноценная vm. С INotifyPropertyChanged
, установкой DataContext
и т.д.
Вариант 3: Для контрола создается класс vm (напр Type1ViewModel
), а в главной vm что-то типа Type1ViewModel[]
И как следствие вопрос, как в разметке (ну или в главной vm) назначать DataContext
?
Я бы сделал так: для каждого из контролов — своя полноценная VM. В конце-концов, у них разные методы работы, так что вам нужны разные типы. Если вам нужно поместить их в общий контейнер, пускай они реализуют общий интерфейс.
DataContext
правильно назначать так. Главная VM создаётся не в разметке, а внешним кодом. Лучше всего для этого подходит App.xaml.cs
. Там вы создаёте главную VM, главное окно, и устанавливаете ему DataContext
. Смысл этого в том, что вы не всегда можете правильно отконфигурировать главную VM конструктором без параметров.
Вложенные VM для контролов должны быть доступны через главную VM как свойства (или как свойство-коллекция, например).
Раздачу вложенных VM контролам переложите на MainWindow
. У вас должен быть код наподобие
<MyApiControl DataContext="{Binding MyApiVM}"/>
в главном окне.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Я понимаю общие принципы Master/Slave, но как это красиво наложить на WCF очень туманно вижу
Задача: слияние узлов XML и классов, где свойства помеченные атрибутом ToXmlAttribute, являются атрибутами Xml (Node Name=""):
Есть массив из нулей и единиц, мне нужно за один проход по массиву найти сумму единиц до каждого из нулей и результат записать в новую коллекцию,...
Читаю сейчас книгу Троелсена и при создании новой базы данных SQL Server возникла ошибка: