2
我顯然不明白這個地方。wpf 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中暫且......但是請注意,這實際上是一個用戶控件:常見的做法,我相信,在MVVM)承載控制具有以下行:
<ctl:ctlToolbarEdit HorizontalAlignment="Right" Grid.Row="1"
SaveCommand="{Binding Save}" IsSaveEnabled="{Binding IsValid}" />
這很好。我有一個ICommand的我視圖模型稱爲「保存」和視圖模型正確呈現的IsValid財產。
到目前爲止非常好。
現在我想有我新的用戶控件也Form2上(這也是一個用戶控件 - 常見的做法,我相信,在MVVM)。碰巧,Form1和Form2同時在屏幕上。
它編譯,但我得到一個運行時異常:
「SaveCommand」屬性已經由「ctlToolbarEdit」」
...註冊導致我相信,我不噸得到「命令」可言。
爲什麼我不能在多個地方使用我的用戶?
如果我不能,你會認爲是肛有沒有辦法做到這一點?
很沮喪!
感謝您的任何幫助。
完美,配偶 - 工作。非常感謝。我希望你對我對命令的理解的信心不會錯位! – Gray 2012-04-21 13:17:43