2013-02-07 76 views
3

我有下面的代码连接窗口与视图模型

<Window.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="UI/ResourceDirectory.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
     <DataTemplate DataType="{x:Type vm:MainWindowViewModel}"> 
      <local:MainWindow></local:MainWindow> 
     </DataTemplate> 
    </ResourceDictionary> 

</Window.Resources> 

而且它给下面的错误

不能把一个窗口样式

我发现this答案。

我已经做了所有需要的UI编码在主窗口,但它是不可能将其与相应的视图模型连接(在另一个项目安置了它,我使用它的引用)。

所以我的问题是,“为什么我能做到这一点呢?”,“我如何连接窗口控制与视图模型?”,“我应该使用一个用户控件呢?”

+0

为什么不使用'UserControl'而不是'Window'? –

+0

因为我之前做过编码。它是一个WPF中的演示应用程序,供我学习。如果它不可能,我会尝试UserControl。 – user2039445

回答

0

你试图把一个窗口放在另一个窗口内,这是不可能的。连接View和ViewModel非常简单,但取决于您的项目结构。 你可以将它设置在Window构造函数,例如:

public partial class MainWindow : Window  
{ 
    public MainWindow() 
    { 
     this.DataContext = new MainWindowViewModel(); 
     InitializeComponent(); 
    } 
} 

的办法`重新努力采取公正不`吨工作Windows,只有当你把自己的ViewModels在XAML是非常有用的。

0

要将视图模型连接到你所要做的XAML代码如下所示的视图。

<Window.DataContext> 
    <viewModel:MainWindowViewModel/> 
</Window.DataContext> 

viewModel是命名空间。

xmlns:viewModel="clr-namespace:TestProject.ViewModel" 

您不应该在视图的代码隐藏中设置viewmodel!

+1

在这种情况下把VM初始化放在哪里真的很重要吗?如果它具有无参数构造函数,则将其放入构造函数或XAML中仅取决于团队编码约定。或者我错过了什么?你将如何解决VM构造函数有一些参数的情况? – icebat

+0

对不起,我以为这是mvvm :) – Tomtom