如何使用DataContext属性在XAML中的窗口上设置ViewModel?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用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">
除了其他人提供的解决方案(这是好的,正确的)之外,还有一种方法可以在XAML中指定ViewModel,但仍然将特定的ViewModel与View分开。当您想要编写独立的测试用例时,分离它们非常有用。
在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.ViewModels"
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。在您的语句中,它只是将其视为字符串值。
<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),该类自动为您创建视图模型。这样,您可以像在原始帖子中一样使用ViewModel的声明,并且仍将创建视图模型并将其设置为DataContext。
有关示例,请参阅this article。
以上是关于如何使用DataContext属性在XAML中的窗口上设置ViewModel?的主要内容,如果未能解决你的问题,请参考以下文章
XAML - 绑定到 DataContext 并使用转换器?
在此示例中,在 XAML 中使用 DataContext 和代码背后有啥区别?
如何在不创建 ViewModel 对象的情况下指定 DataContext (ViewModel) 类型以在 XAML 编辑器中进行设计时绑定检查? [复制]
为啥在 XAML 中绑定 MainWindow 数据上下文与使用 this.datacontext=this 在代码隐藏中绑定的行为不同?