0

我正在使用 MVVM 制作一个 Windows 8 程序,该程序与 Phone 共享 MVM 部分。

我的问题是,当我尝试在 WinRT 中使用 Windows Phone 项目的 XAML 示例数据时,我得到了一堆错误。我的 XAML 是:

<vm:MyViewModel
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:MyApp.ViewModels" 
>

这显然是错误的,因为使用了 clr-namespace 指令。但是,如果我将其更改为

<vm:MyViewModel
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:MyApp.ViewModels" 
>

我得到了同样的错误,例如

The name "MyViewModel" does not exist in the namespace "using:MyApp.ViewModels"

我可以像在 Windows Phone 中一样在 WinRT 中使用 XAML 文件作为示例吗?我该如何解决这个错误?

谢谢 :)

4

2 回答 2

2

创建使用示例数据的另一种方法是将 d:DataContext 设置为您的 ViewMode,设置 IsCreatableInDesignTime=True (这意味着它将运行它的构造函数),然后在构造函数中创建一些示例对象。

XAML:

xmlns:viewmodel="clr-namespace:SampleApp.ViewModels"
d:DataContext="{d:DesignInstance Type=viewmodel:SampleViewModel, IsDesignTimeCreatable=True}">

代码隐藏:

public SampleViewModel()
{
   if (DesignerProperties.IsInDesignTool)
   {
      //CREATE DESIGN TIME DATA HERE
   }

}

DesignerProperties.IsInDesignToolSystem.ComponentModel的一部分,并根据您是否处于设计时返回布尔值,这意味着当您运行应用程序时,它将始终返回 false。如果您正在为 Windows Phone 和 Silverlight 进行开发,这将起作用。

如果您正在为 Windows 应用商店开发,您可以改为使用Windows.ApplicationModel.DesignMode.DesignModeEnabled来检查您是否处于设计阶段。除此之外,它的工作方式相同。

于 2013-03-20T08:50:08.720 回答
1

很奇怪,但问题是,出于某种原因,编译器无法识别 ViewModel 类,即使它们在哪里。

解决方法:删除 XAML 示例数据文件,clean&build; 然后,重新创建 XAML 示例数据文件(其中包含相同的代码!),就像一个魅力。

于 2013-03-19T22:14:57.583 回答