[英]How to use RelayCommand with the MVVM Light framework
我剛剛開始學習 MVVM Light 框架,我找不到任何關於如何使用 RelayCommand 的簡單示例。 出於學習的目的,我只想在我的視圖中有一個按鈕,單擊該按鈕時顯示的是一個 hello world 消息框,並且每隔一分鍾啟用(基本上如果 DateTime.Now.Minute % 2 == 0) .
按鈕 XAML 的外觀如何以及如何在 ViewModel 中定義 RelayCommand HelloWorld?
謝謝你的幫助!!
RelayCommand
的目的是實現 Button 控件所需的ICommand
接口,並將調用傳遞給其他一些 function,它們通常位於 ViewModel 中它們旁邊。
因此,例如,您將有一個 ViewModel class ,例如:
class HelloWorldViewModel : ViewModelBase
{
public RelayCommand DisplayMessageCommand { get; private set; }
private DispatchTimer _timer;
public HelloWorldViewModel()
{
this.DisplayMessageCommand = new RelayCommand(this.DisplayMessage, CanDisplayMessage);
// Create a timer to go off once a minute to call RaiseCanExecuteChanged
_timer = new DispatchTimer();
_timer = dispatcherTimer.Tick += OnTimerTick;
_timer.Interval = new Timespan(0, 1, 0);
_timer.Start();
}
private void OnTimerTick(object sender, EventArgs e)
{
this.DisplayMessageCommand.RaiseCanExecuteChanged();
}
public bool CanDisplayMessage()
{
return DateTime.Now.Minute % 2 == 0;
}
public void DisplayMessage()
{
//TODO: Do code here to display your message to the user
}
}
在您的控制中,您可以直接通過DataContext
DataContext={StaticResource...}
在代碼后面或 XAML 中設置 DataContext
然后,您的按鈕將綁定到 ViewModel 中的命令,如下所示
<Button Content='Push me' Command='{Binding DisplayMessageCommand}' />
單擊 Button 時,它使用DisplayMessageCommand
並在此 object 上調用Execute()
, RelayCommand
將其轉發到DisplayMessage
方法。
DispatchTimer
每分鍾關閉一次並調用RaiseCanExecuteChanged()
。 這允許綁定到命令的按鈕重新檢查命令是否仍然有效。 否則,您可能會單擊該按鈕而發現該命令當前不可用。
或與 lambda
private RelayCommand<anyobject> _AddCmd;
public ICommand AddPoint
{
get
{
return _AddCmd ??
(
_AddCmd = new RelayCommand
(
(obj) =>
{
ViewModelWF.ZeroPoints.Add(new WM.Point(0, 0));
}
)
);
}
}
private RelayCommand _DeleteCmd;
public ICommand DeletePoint
{
get
{
return _DeleteCmd ??
(
_DeleteCmd = new RelayCommand
(
() =>
{
int idx = wpfZeroPoints.SelectedIndex;
},
() =>
{
return wpfZeroPoints.SelectedIndex <= 0;
}
)
);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.