WPF MVVM Зачем использовать ContentControl + DataTemplate Views, а не прямые окна XAML?
У меня есть вопрос о MVVM в WPF, который сводит меня с ума.
Почему так :?
MainWindow.xaml:
Настройте ваш ExampleView.xaml как:
И создайте окно так:
public partial class App : Application {
protected override void OnStartup(StartupEventArgs e) {
base.OnStartup(e);
MainWindow app = new MainWindow();
ExampleVM context = new ExampleVM();
app.DataContext = context;
app.Show();
}
}
Когда вы можете сделать это так:?
App.xaml: (установить окно запуска / вид)
ExampleView.xaml: (окно не ResourceDictionary)
>
По сути это "Просмотреть как DataTemplate " (VaD) против "Посмотреть как окно " (НОЖ)
Вот мое понимание сравнения: (Обратите внимание, я использую VS 2008, поэтому мне не хватает Blendability &/ или другие вещи)
VaD: позволяет переключать режимы просмотра, не закрывая окно. (Это не желательно для моего проекта)VaD: VM абсолютно ничего не знает о View, тогда как в VaW он (только) должен иметь возможность создавать его экземпляр при открытии другого окнаVaW: я действительно вижу мой xaml, отрендеренный в Designer (я могу 'т с VaD, по крайней мере, в моей текущей настройке)VaW: работает интуитивно с открытием и закрытием окон; Каждое окно имеет (есть) соответствующий View (и ViewModel)VaD: ViewModel может передавать начальную ширину окна, высоту, изменение размера и т. Д. Через свойства (тогда как в VaW они устанавливаются непосредственно в окне)VaW: можно установить FocusManager.FocusedElement (не уверен, как в VaD)VaW: Меньше файлов, так как мои типы окон (например, Лента, Диалог) включены в их представленияИ что'здесь происходит? Можно'я просто строю свои окна в XAML, получаю чистый доступ к их данным через свойства виртуальной машины, и с этим покончено? Код позади такой же (практически ноль). Я'Я изо всех сил пытаюсь понять, почему я должен перетасовать все вещи View в ResourceDictionary. (Но я нене хочу делать этонеправильно ;-))
Имеет ли это значение? Есть ли что-то, что япропустили? Большое спасибо за чтение. : O
Спасибо Рэйчел Лим и Нику Поляку за мое понимание MVVM
Изменить: Незначительное изменение потока