如何使用DataContext属性在XAML中的窗口上设置ViewModel?

这个问题几乎说明了一切。

我有一个窗口,并试图设置DataContext使用完整的命名空间的ViewModel,但我似乎做错了什么。

<Window x:Class="BuildAssistantUI.BuildAssistantWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" DataContext="BuildAssistantUI.ViewModels.MainViewModel"> 

除了其他人提供的解决scheme(这是好的,正确的)之外,还有一种方法可以在XAML中指定ViewModel,但仍然将ViewModel从View中分离出来。 当你想编写独立的testing用例时,将它们分开是非常有用的。

在App.xaml中:

 <Application x:Class="BuildAssistantUI.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:BuildAssistantUI" StartupUri="MainWindow.xaml" > <Application.Resources> <local:MainViewModel x:Key="MainViewModel" /> </Application.Resources> </Application> 

在MainWindow.xaml中:

 <Window x:Class="BuildAssistantUI.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" DataContext="{StaticResource MainViewModel}" /> 

试试这个。

 <Window x:Class="BuildAssistantUI.BuildAssistantWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:VM="clr-namespace:BuildAssistantUI.ViewModels"> <Window.DataContext> <VM:MainViewModel /> </Window.DataContext> </Window> 

您需要实例化MainViewModel并将其设置为datacontext。 在你的声明中,它只是把它看作string值。

  <Window x:Class="BuildAssistantUI.BuildAssistantWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:BuildAssistantUI.ViewModels"> <Window.DataContext> <local:MainViewModel/> </Window.DataContext> 

你可能想尝试Catel 。 它允许你定义一个DataWindow类(而不是Window),并且该类自动为你创build视图模型。 这样,您可以像在原始文章中那样使用ViewModel的声明,并且视图模型仍将被创build并设置为DataContext。

看到这篇文章的例子。