我正在学习 Caliburn Micro,并创建了一个类似于本教程的项目:
现在我想创建另一个用户控件并将其添加到上述模型中。所以我创建了一个简单的用户控件,它与教程中的 shellViewModel 基本相同。视图和视图模型与 shellViewModel 和 ShellView 相同,但名称不同。
当我运行应用程序时,我可以看到该视图显示在屏幕上,但它没有绑定到 ViewModel。我应该对引导程序进行任何更改以使其有效吗?
更多信息:我创建了一个类似于上述教程的 wpf 项目。它运作良好。
我在项目中添加了一个新的用户控件并将其命名为 NewUCView。所以我的项目中有以下文件:
新UCView.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>
新UCView.xaml.cs
namespace CaliburnMicroTest
{
/// <summary>
/// Interaction logic for NewUC.xaml
/// </summary>
public partial class NewUCView : UserControl
{
public NewUCView()
{
InitializeComponent();
}
}
}
新UCViewModel.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 上)有效。