私はCaliburn Microを学んでおり、このチュートリアルに似たプロジェクトを作成しました:
次に、別のユーザー コントロールを作成して、上記のモデルに追加します。そのため、チュートリアルの shellViewModel と本質的に同じ単純なユーザー コントロールを作成しました。ビューとビュー モデルは shellViewModel と ShellView と同じですが、名前が異なります。
アプリケーションを実行すると、ビューが画面に表示されていることがわかりますが、ViewModel にバインドされていません。これが機能するように、ブートストラップに変更を加える必要がありますか?
詳細: 上記で説明したように、チュートリアルに似た 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>
また、次のように NewUCViewModel である newUC というプロパティを持つように ShellViewModel を変更しました。
private NewUCViewModel newUC=new NewUCViewModel();
public NewUCViewModel NewUC
{
get
{
return newUC;
}
}
しかし、このアプリケーションを実行して最初の click me (ユーザー コントロール上) を押すと、機能しません。もう 1 つのボタン (ShellView にある) は機能します。