将Window.Content设置为ViewModel - 简单的数据模板不起作用

时间:2011-05-24 09:27:24

标签: mvvm datatemplate

试图了解MVVM,并获得一个简单的窗口,通过数据模板将其视图模型呈现为视图。

在App.xaml中:

<Application.Resources>
   <DataTemplate DataType="{x:Type vm:TestViewModel}">
      <vw:TestView />
   </DataTemplate>
</Application.Resources>

查看定义:

<UserControl x:Class="MyNamespace.TestView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <TextBlock>TESTING</TextBlock>
    </Grid>
</UserControl>

在MainWindowViewModel中:

private void onOpenTestView(object sender)
{
   Window w = new Window();
   w.Content = new TestViewModel();
   w.Show();
}

运行应用程序会产生一个带有“MyNamespace.TestViewModel”字符串的窗口,而不是“TESTING”,这将导致我的数据模板无法找到。

我对这一切都很陌生,所以我错过了一些明显的东西吗?我不认为这是一个字符串匹配问题,因为如果我故意拼错XAML中的视图或模型,那么它就不会编译。

我的新窗口是否可以访问我的应用资源(以及我的datatemplate)?

干杯, 杰里米

编辑:已修复(无法回答8小时)

由于MS Bug,除非至少设置了一种样式,否则不会读取资源。

请参阅http://connect.microsoft.com/VisualStudio/feedback/details/553528/defaultstylekey-style-not-found-in-inner-mergeddictionaries

1 个答案:

答案 0 :(得分:0)

由于MS Bug,除非至少设置了一种样式,否则不会读取资源。

请参阅http://connect.microsoft.com/VisualStudio/feedback/details/553528/defaultstylekey-style-not-found-in-inner-mergeddictionaries