我显然没有在某个地方得到这个。
我创建了一个 UserControl,其基本内容是:
private readonly DependencyProperty SaveCommandProperty =
DependencyProperty.Register("SaveCommand", typeof(ICommand),
typeof(ctlToolbarEdit));
private readonly DependencyProperty IsSaveEnabledProperty =
DependencyProperty.Register("IsSaveEnabled", typeof(bool),
typeof(ctlToolbarEdit), new PropertyMetadata(
new PropertyChangedCallback(OnIsSaveEnabledChanged)));
public ctlToolbarEdit()
{
InitializeComponent();
}
public bool IsSaveEnabled
{
get { return (bool)GetValue(IsSaveEnabledProperty); }
set { SetValue(IsSaveEnabledProperty, value); }
}
public static void OnIsSaveEnabledChanged(DependencyObject d,
DependencyPropertyChangedEventArgs e)
{
((ctlToolbarEdit)d).cmdSave.IsEnabled = (bool)e.NewValue;
}
#region Command Handlers
public ICommand SaveCommand
{
get { return (ICommand)GetValue(SaveCommandProperty); }
set { SetValue(SaveCommandProperty, value); }
}
private void cmdSave_Click(object sender, RoutedEventArgs e)
{
if (SaveCommand != null)
SaveCommand.Execute(null);
}
#endregion
优秀的。你可以看到我在做什么......处理按钮的点击事件,并基本上启动命令。
托管控件的表单(让我们暂时称其为 Form1 ......但请注意,这实际上是一个 UserControl:我相信在 MVVM 中的常见做法)具有以下行:
<ctl:ctlToolbarEdit HorizontalAlignment="Right" Grid.Row="1"
SaveCommand="{Binding Save}" IsSaveEnabled="{Binding IsValid}" />
这很好用。我的ViewModel中有一个名为“Save”的ICommand,并且ViewModel正确显示了IsValid属性。
到目前为止非常好。
现在我想在 Form2 上也有我的新用户控件(这也是一个用户控件 - 我相信在 MVVM 上的常见做法)。碰巧的是,Form1 和 Form2 同时出现在屏幕上。
它编译,但我得到一个运行时异常:
'SaveCommand' 属性已由 'ctlToolbarEdit' 注册。”
...让我相信我根本没有得到“命令”。
为什么我不能在多个地方使用我的用户控件?
如果我不能,你会建议另一种方法来做到这一点吗?
非常令人沮丧!
谢谢你的帮助。