2010-01-19 159 views
3

我已經完全失去了在命令綁定在MVVM使用。我應該如何將我的對象綁定到窗口和/或其控制的命令以獲取在ButtonClick上調用的方法?WPF MVVM:ICommand的綁定的控件

這裏是一個CustomerViewModel類:

public class CustomerViewModel : ViewModelBase 
{ 
    RelayCommand _saveCommand; 
    public ICommand SaveCommand 
    { 
     get 
     { 
      if (_saveCommand == null) 
      { 
       _saveCommand = new RelayCommand(param => this.Save(), param => this.CanSave); 
       NotifyPropertyChanged("SaveCommand"); 
      } 
      return _saveCommand; 
     } 
    } 

    public void Save() 
    { 
     ... 
    } 

    public bool CanSave { get { return true; } } 

    ... 

ViewModelBase實現INotifyPropertyChanged接口 下面是如何Button被綁定到該命令:

<Button Content="Save" Margin="3" Command="{Binding DataContext.Save}" /> 

CustomerViewModel的實例被分配給DataContext包含Button的窗口。

給出的例子是行不通的:我已經把破發點到Save方法,但執行不傳遞給方法。我已經看到了很多例子(在stackoverflow上),但無法弄清楚應該如何指定綁定。

請指教,任何幫助將不勝感激。

謝謝。

P.S.也許我需要在按鈕綁定指定RelativeSource ...是這樣的:

Command="{Binding Path=DataContext.Save, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" 

但類型應始祖指定?

+1

是否有程序的輸出任何有約束力的錯誤?綁定錯誤經常不被發現。你也應該嘗試Snoop。這是一個附加到正在運行的應用程序的工具,也可以發現綁定錯誤。 – Thorsten79 2010-01-19 15:28:33

回答

10

你正在嘗試做的是直接綁定到Save方法。這不是如何去做。

假設你已經確立了自己查看的的DataContext到CustomerViewModel的實例,你這是怎麼綁定到SaveCommand:

<Button Content="Save" Margin="3" Command="{Binding SaveCommand}" /> 

你不必調用NotifyPropertyChanged("SaveCommand");

+0

非常感謝! 巧妙簡單的:)現在,我得到它的工作原理:) 附:我會給答案添加一個分數,但還沒有足夠的分數。 – Budda 2010-01-19 15:51:51