簡體   English   中英

WPF UI無法更新

[英]Wpf UI does not update

我有一個wpf mvvm應用程序。 視圖中有一個按鈕,該按鈕綁定到視圖模型中的命令。 此命令的CanExecute函數返回某些bool屬性的值

private bool Command1CanExecute()
{
    return IsConnected;
}

更改屬性后,該按鈕應被禁用,但是直到我單擊UI中的某個位置時,按鈕才會禁用。 我考慮過的解決方案(它可以工作:))是運行

  CommandManager.InvalidateRequerySuggested();

每秒(分派器計時器可以做到)。

對於我的問題,還有其他更優雅的解決方案嗎? 謝謝。

馬特維。

任何用戶交互后,所有命令都會更新。 如果您以編程方式更改屬性並想更新命令狀態,則必須在屬性更改后建議重新查詢:

CommandManager.InvalidateRequerySuggested();

您還可以引發命令的CanExecuteChanged-Event(僅執行上述操作)

Command1.RaiseCanExecuteChanged();

您可以將以下任何內容插入IsConnected的設置器中,如下所示

private bool _isConnected;
public bool IsConnected
{
  get { return _isConnected; }
  set
  {
    if (_isConnected != value)
    { 
      _isConnected = value;
      RaisePropertyChanged(); //or something similar
      Command1.RaiseCanExecuteChanged();
    }
  }
}

如果您不希望這樣做,則可以在CanExecute-Handler中返回true並將按鈕的IsEnabled綁定到屬性本身。

<Button IsEnabled="{Binding IsConnected}" Command="{Binding Command1}" ... />

對於使用MicroMvvm的用戶,需要將更改應用於以下類: public class RelayCommand<T>:ICommand

和方法:

 [DebuggerStepThrough]
        public Boolean CanExecute(Object parameter)
        {

            var valu = _canExecute == null ? true : _canExecute();
            CommandManager.InvalidateRequerySuggested();
            return valu;
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM