2012-04-21 12 views
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}" /> 

これは素晴らしい動作します。私はと呼ばれる私ののViewModelのICommandを持って '保存'のViewModelは正しくのIsValidプロパティを提示しています。

これまでのところ非常に良好です。

Form2にも私の新しいusercontrolを持たせたいと思います(これはMVCでもusercontrol - common practiceです)。 Form1とForm2が同時に画面に表示されます。

それはコンパイルが、私は、実行時例外を取得:

は 'SaveCommand' プロパティは、すでに 'ctlToolbarEdit' によって登録された「

...そのIドン」を信じるために私をリードします。 tはすべての「コマンド」を取得。

を私は複数の場所で私のユーザーコントロールを使用できないのはなぜですか

私ができない場合は、あの何であるかを示唆していますこれを行う方法?

非常にイライラします!

ありがとうございました。

答えて

4

依存関係のプロパティを静的にしてみてください。それ以外の場合は、新しいコントロールをインスタンス化するたびに再登録されます。あなたのMVVMコマンドの使い方はうまく見えますが、あなたがよく理解しているように思います。

+0

完璧な、仲間 - それは働いた。どうもありがとう。私は命令に対する私の理解へのあなたの信頼が間違っていないことを願っています! – Gray

関連する問題