如何使用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。
看到这篇文章的例子。