2015-05-02 116 views
1

我絕對有沒有想法是什麼造成這種情況。RaiseCanExecuteChanged不工作在編譯的exe但在調試時工作

背景:使用Prism框架

  1. 我有一個按鈕綁定到DelegateCommand
  2. 我打電話RaiseCanExecuteChanged

當我在Visual啓動應用程序在調試模式下工作室,一切正常完美。該應用程序運行完美。

當我通過.exe打開應用程序時,RaiseCanExecuteChanged方法未被調用。我不知道爲什麼會這樣。任何人遇到類似的問題?


編輯:當我第一次通過 .exe文件打開應用程序,RaiseCanExecuteChanged被稱爲(因爲我把它在我的ViewModel的構造函數)。但是,它不會再被調用。


代碼的情況下,它的需要:

private readonly DelegateCommand _buttonCommand; 

public ViewModel() 
{ 
    _buttonCommand = new DelegateCommand(Button, CanExecuteButton); 
} 

public DelegateCommand ButtonCommand 
{ 
    get { return this._buttonCommand; } 
} 

public void Button() 
{ 
    ... do stuff ... 
    _buttonCommand.RaiseCanExecuteChanged(); 
} 

public bool CanExecuteButton() 
{ 
    if (some condition) 
     return true; 
    else 
     return false; 
} 

<Button x:Name="MyButton" Content="ClickMe" 
     Command="{Binding ButtonCommand}"> 

我甚至變得絕望,並試圖把一個IsEnabled財產在我的按鈕,我必然要CanExecuteButton ...無濟於事。

+0

你可以發佈你的'ButtonCommand'的代碼? –

+0

解決了,但我不知道爲什麼。它現在正在工作... – Bryant

回答

0

我遇到過與Prism DelegateCommand.CanExeuteChanged事件沒有被調用類似的問題。通過查看源代碼,它看起來像是因爲它不依賴於CommandManager.RequerySuggested

嘗試使自己的命令,其中事件CanExecuteChanged是像這樣:

public RelayCommand : ICommand 
{ 
    private event EventHandler _canExecuteChanged; 
    public event EventHandler CanExecuteChanged 
    { 
     add 
     { 
      CommandManager.RequerySuggested += value; 
      _canExecuteChanged += value; 
     } 
     remove 
     { 
      CommandManager.RequerySuggested -= value; 
      _canExecuteChanged -= value; 
     } 
    } 

    public void RaiseCanExecuteChanged() 
    { 
     var handler = _canExecuteChanged; 
     if (handler != null) 
      handler(this, EventArgs.Empty); 

    } 

    // All the other stuff also 
} 

現在,如果WPF檢測到用戶界面的變化,則命令管理器將調用CanExecute的命令。如果應用程序引擎中的某些內容發生更改,則可以調用RaiseCanExecuteChanged來更新CanExecute。

+0

這似乎沒有幫助。 – Bryant

0

嘗試

Command="{Binding DataContext.ButtonCommand,RelativeSource={RelativeSource FindAncestor, AncestorType=YourView}}" CommandParameter="{Binding}" 
相關問題