2012-07-11 113 views
0

我想創建一個利用命令的WPF應用程序,但我遇到了啓用菜單按鈕的命令問題。我正在做一些簡單的驗證,在這種情況下,「保存」按鈕被禁用,直到用戶創建一個新文檔或加載一個現有的文檔。WPF MVVM和命令

比方說我的視圖模型看起來是這樣的,其中視圖模型將繼承INotifyPropertyChanged的對象:

public ViewModel() 
{ 
    New = new RelayCommand(OnNew, CanNew); 
    Save = new RelayCommand(OnSave, CanSave); 
} 

ICommand m_cmdNew; 

public ICommand New 
{ 
    get { return m_cmdNew; } 
    set 
    { 
     m_cmdNew = value; 
     OnPropertyChanged("New"); 
    } 
} 

void OnNew(object param) 
{ 
    bCanSave = true; 
    // I read that this could resolve my problem. 
    CommandManager.InvalidateRequerySuggested(); 
} 

bool CanNew( object param) 
{ 
    return true; 
} 

讓我們假設我在做同樣的事情爲「保存」命令爲好,唯一的例外是「CanSave 「是這樣的:

bool CanSave(object param) 
{ 
    return bCanSave; 
} 

我的XAML:

<Menu> 
    <MenuItem Header="Text"> 
     <MenuItem Header="New" Command="{Binding New}"/> 
     <MenuItem Header="Save" Command="{Binding Save}"/> 
    </MenuItem> 
</Menu> 

的我遇到的問題是在更改變量「bCanSave」後,CanSave方法從未被調用。我怎樣才能做到這一點?我知道我可以簡單地創建一個屬性,並使用INotifyPropertyChanged和XAML綁定,我可以簡單地切換IsEnabled屬性,但是從我閱讀的內容來看,這看起來像很多工作,命令已經這樣做了。

回答

0

您需要提高CanExecuteChanged事件上您要重新評估的命令,在這種情況下,應該在可怕的匈牙利布爾變化時完成。

(我會建議使命令字段readonly和屬性get - 只是,命令通常不會改變)