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

Изменить: Незначительное изменение потока

Ответы на вопрос(3)

Ваш ответ на вопрос