如何使用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 并使用转换器?

在 WPF 中的 XAML 中设置 DataContext

在此示例中,在 XAML 中使用 DataContext 和代码背后有啥区别?

如何在不创建 ViewModel 对象的情况下指定 DataContext (ViewModel) 类型以在 XAML 编辑器中进行设计时绑定检查? [复制]

为啥在 XAML 中绑定 MainWindow 数据上下文与使用 this.datacontext=this 在代码隐藏中绑定的行为不同?

如何使用不在代码后面的 XAML 绑定 ListView ItemsSource。?