2012-09-24 67 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的實例。