Я бы сделал что-то вроде этого (без проверки ошибок):
в ParentWindow.xaml.cs
private void Some_Event_In_Parent_Window()
{
ParentWindowViewModel pvm = DataContext as ParentWindowViewModel;
ChildWindow cw = new ChildWindow(pvm.Element1, pvm.Element2);
}
int ChildWindow.xaml.cs
public ChildWindow(bool elem1, string elem2)
{
InitializeComponents();
DataContext = new ChildWindowViewModel(elem1, elem2);
}
Если вы имеете дело с минимальными элементами, которые должны быть перенесены между окнами / виртуальными машинами, и речь идет в основном об отправке какой-либо формы «состояния» или «значения», то при инициализации Viewmodel в коде не возникает особых проблем.Помните, что <viewmodel:ChildWindowViewModel/>
эквивалентно DataContext = new ChildWindowViewModel()
в вашем коде.Хотя да, вы можете создавать спагетти-код или вводить в заблуждение зависимости, не придерживаясь шаблонов;Вы можете также перепроектировать чушь чего-то, что не требовало усилий и может быть столь же запутывающим.
Я обнаружил, что есть навязчивая идея сохранить ваш код пустым (у меня такая же навязчивая идея).Помните, что Кодекс существует по какой-то причине, и вы МОЖЕТЕ его использовать.Иногда не стоит чрезмерно усложнять вашу кодовую базу путем реализации какого-то большого шаблона, если у вас есть единственное требование, которое может быть обработано в коде с некоторыми добавленными комментариями.
Помимо обработчиков событий, я использую код для следующих основных случаев использования:
- Для пользовательского интерфейса необходима слишком сложная настройка, чтобы обрабатывать ее только в XAML.Пример: мне нужна странная конкатенация строк и логика некоторых вводимых текстовых полей.
- Существует некоторое минимальное состояние или данные, которые необходимо передать между представлениями.(Как и ваше требование)
- Должна произойти какая-то логика, специфичная для пользовательского интерфейса и не связанная с базовыми данными или ViewModel.(Это редко, и почти всегда маленький).
В терминах "это идеал" для MVVM;это зависит от вашего определения идеала.
- Может ли это быть обработано другим шаблоном дизайна?Вероятно...?Но стоит ли это того.
- Добавляет ли реализация указанного шаблона раздувание или накладные расходы, которые решают только небольшую проблему?Может быть.Это вам решать.
- Собираетесь ли вы повторить эту реализацию более одного раза?Если так, у вас может быть плохой дизайн, чтобы переосмыслить
- Решает ли реализация этого решения с использованием кода позади быстрое решение вашей проблемы, которое можно поддерживать и читать в меру?Если так, то я не вижу проблемы.
Идеал не всегда определяется правилами.Это также зависит от ваших потребностей и требований.
Не всегда легко определить, где должен использоваться ваш вариант использования.View, ViewModel, может быть, Service или класс состояний Singleton.Если ваш вариант использования это одно окно, код в порядке (по моему мнению).Если вы делаете это для 20 окон, вы можете захотеть, чтобы Служба как-то поддерживала состояние.Подумайте об этом больше - если ваш код SOLID и DRY