2009-03-03 64 views
2

我有一個ViewModel類,我想響應內置的刷新命令,這是從按鈕觸發的,但我不知道如何聲明CommandTarget。獲取非UI對象來響應WPF命令綁定

簡單地說,我的代碼如下

視圖模型構造和CanExecute和執行的事件處理程序 -

public ViewModel() 
    { 
     CommandBinding binding = new CommandBinding(NavigationCommands.Refresh, CommandHandler); 
     binding.CanExecute += new CanExecuteRoutedEventHandler(binding_CanExecute); 
     binding.Executed += new ExecutedRoutedEventHandler(binding_Executed); 
     CommandManager.RegisterClassCommandBinding(typeof(ViewModel), binding); 
    } 
    void binding_Executed(object sender, ExecutedRoutedEventArgs e) 
    { 
     Debug.Print("Refreshing..."); 
    } 

    void binding_CanExecute(object sender, CanExecuteRoutedEventArgs e) 
    { 
     e.CanExecute = true; 
    } 

標記是 -

<Button Command="Refresh">refresh</Button> 

現在,我已經試過設置在這個按鈕上的CommandTarget到{Binding Source={StaticResource ViewModel}},但我得到一個運行時說Cannot convert the value in attribute 'CommandTarget' to object of type 'System.Windows.IInputElement'

我是新來的命令,所以這是完全可能的我在這裏是各種各樣的錯誤。任何幫助,將不勝感激。

回答

5

RoutedCommand s和MVVM不混合。 RoutedCommand s被綁定到可視化樹上並依靠WPF的CommandBindings集合。您應該實現自己的ICommand類與MVVM模式一起工作。請參閱Prism's implementations初學者。

在我自己的MVVM的項目,我有一對夫婦的命令實現的:

  • DelegateCommand。調用爲委託人提供了確定命令是否可以執行並執行命令的功能。
  • ActiveAwareCommand。與接口(IActiveAware)一起使用,並將命令執行發送到當前活動的項目。多個主動感知實現向該命令註冊自己,並且該命令自動將CanExecute/Execute調用路由到當前活動的項目。
+0

謝謝肯特。這有助於 – Stimul8d 2009-03-03 12:07:58