2012-09-24 36 views
0

我学习卡利Micro和我创建类似本教程的一个项目:将控制在卡利微另一个控制

http://caliburnmicro.codeplex.com/wikipage?title=Basic%20Configuration%2c%20Actions%20and%20Conventions&referringTitle=Documentation

现在我想创建另一个用户控制并将其添加到上述模型。所以我创建了一个简单的用户控件,它与本教程中的shellViewModel基本相同。视图和视图模型与shellViewModel和ShellView相同,但名称不同。

当我运行应用程序时,我可以看到屏幕上显示该视图,但它不绑定到ViewModel。我应该对bootstrap进行任何更改,以便它有效吗?

更多信息: 我已经创建了一个类似于上述教程的wpf项目。 它运作良好。

我将一个新的用户控件添加到项目并将其命名为NewUCView。 所以我有以下的文件在我的项目:

NewUCView.xaml

<UserControl x:Class="CaliburnMicroTest.NewUCView" 
     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"> 
    <StackPanel> 
    <TextBox x:Name="Name" /> 
    <Button x:Name="SayHello" 
      Content="Click Me" /> 
    </StackPanel> 
</UserControl> 

NewUCView.xaml.cs

namespace CaliburnMicroTest 
    { 
    /// <summary> 
    /// Interaction logic for NewUC.xaml 
    /// </summary> 
    public partial class NewUCView : UserControl 
    { 
     public NewUCView() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

NewUCViewModel.cs

namespace CaliburnMicroTest 
{ 
    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Windows; 

    using global::Caliburn.Micro; 

    /// <summary> 
    /// TODO: Update summary. 
    /// </summary> 
    public class NewUCViewModel : PropertyChangedBase 
    { 
     string name; 

     public string Name 
     { 
      get { return name; } 
      set 
      { 
       name = value; 
       NotifyOfPropertyChange(() => Name); 
       NotifyOfPropertyChange(() => CanSayHello); 
      } 
     } 

     public bool CanSayHello 
     { 
      get { return !string.IsNullOrWhiteSpace(Name); } 
     } 

     public void SayHello() 
     { 
      MessageBox.Show(string.Format("Hello {0}!", Name)); //Don't do this in real life :) 
     } 
    } 
} 

我改变了ShellView如下所示,并将NewUCView的引用添加到其中。

<StackPanel> 
    <my:NewUCView x:Name="newUC" /> 
    <TextBox x:Name="Name" /> 
    <Button x:Name="SayHello" 
      Content="Click Me" /> 

</StackPanel> 

也改变了ShellViewModel有一个叫newUC属性,它是一个NewUCViewModel如下:

private NewUCViewModel newUC=new NewUCViewModel(); 
    public NewUCViewModel NewUC 
    { 
     get 
     { 
      return newUC; 
     } 

    } 

但是当我运行该应用程序,并按下首先点击我(这是对用户控件) ,它不起作用。另一个按钮(在ShellView上)工作。

+0

你能发表一些代码吗? – Klaus78

+0

请参阅我向其中添加代码的问题。我可以上传项目,但我不知道如何。 – mans

回答

1

您不应该将usercontrol直接添加到视图,并让caliburn框架为您做。 你需要一个占位符添加到您的主视图,并将其绑定到代表您的视图模型属性:

<ContentControl x:Name="NewUC"/> 

由于卡利可以通过查看该控件的名称,在我的代码框架能够解决数据绑定将NewUCView与在您的示例NewUC中命名的NewUCViewModel绑定,并在ContentControl palceholder内显示NewUCView的实例。