2012-09-24 4 views
0

caliburn 마이크로의 다른 컨트롤에 컨트롤을 추가하고 나는이 튜토리얼 유사한 프로젝트 생성 :내가 Caliburn 마이크로 배우고

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

가 지금은 다른 사용자 컨트롤을 생성하고, 상기에 추가 할을 모델. 그래서 튜토리얼에서 shellViewModel과 본질적으로 동일한 간단한 사용자 컨트롤을 만들었습니다. 보기 및보기 모델은 shellViewModel 및 ShellView와 같지만 이름은 다릅니다.

응용 프로그램을 실행하면 해당보기가 화면에 표시되지만 ViewModel에 바인딩되지 않은 것을 볼 수 있습니다. 부트 스트랩을 변경해야 작동합니까?

추가 정보 : 위 설명과 같이 튜토리얼과 비슷한 wpf 프로젝트를 만들었습니다. 잘 작동합니다.

프로젝트에 새 사용자 정의 컨트롤을 추가하고 이름을 NewUCView로 지정합니다. 나는 변경

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 :) 
     } 
    } 
} 

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 : 그래서 나는 내 프로젝트에 다음 파일이 ShellView를 클릭하고 NewUCView에 대한 참조를 추가하십시오.

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

</StackPanel> 

은 또한 다음과 같은 NewUCViewModel입니다 newUC라는 속성이 있기 위하여 ShellViewModel을 변경 :

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

    } 

을하지만이 응용 프로그램을 실행하고 누르면 첫 번째 (사용자 컨트롤에있는) 저를 클릭 , 작동하지 않습니다. 다른 단추 (ShellView에 있음)가 작동합니다.

+0

몇 가지 코드를 게시 할 수 있습니까? – Klaus78

+0

코드를 추가 할 때 질문을보십시오. 프로젝트를 시작할 수는 있지만 어떻게 해야할지 모르겠습니다. – mans

답변

1

뷰에 직접 usercontrol을 추가하지 말고 caliburn 프레임 워크에서 자동으로 수행해야합니다. 당신은 당신의 기본보기에 자리 표시자를 추가하고 뷰 모델을 나타내는 속성에 바인딩해야합니다

<ContentControl x:Name="NewUC"/> 

caliburn, 내 코드에서 프레임 워크는 컨트롤의 이름을 것보고 데이터 바인딩을 해결할 수 있기 때문에 NewUCView를 NewUCView라는 이름의 NewUCViewModel과 바인드하고, NewUC를 ContentControl palceholder 안에 표시합니다.

관련 문제