共用方式為


RelayCommand 和 RelayCommand<T>

RelayCommand RelayCommand<T>ICommand 可公開方法或委派至檢視的實作。 這些類型可作為在 viewmodel 和 UI 元素之間系結命令的方式。

平臺 API:RelayCommand、、、 IRelayCommandRelayCommand<T>IRelayCommand<T>

運作方式

RelayCommandRelayCommand<T> 具有下列主要功能:

  • 它們提供介面的 ICommand 基底實作。
  • 它們也會實 IRelayCommand 作 (和 IRelayCommand<T>) 介面,其會 NotifyCanExecuteChanged 公開方法來引發 CanExecuteChanged 事件。
  • 它們會公開採用 和 Func<T>Action委派的建構函式,以允許包裝標準方法和 Lambda 表達式。

使用 ICommand

下列示範如何設定簡單的命令:

public class MyViewModel : ObservableObject
{
    public MyViewModel()
    {
        IncrementCounterCommand = new RelayCommand(IncrementCounter);
    }

    private int counter;

    public int Counter
    {
        get => counter;
        private set => SetProperty(ref counter, value);
    }

    public ICommand IncrementCounterCommand { get; }

    private void IncrementCounter() => Counter++;
}

然後,相對UI可以是 (使用 WinUI XAML):

<Page
    x:Class="MyApp.Views.MyPage"
    xmlns:viewModels="using:MyApp.ViewModels">
    <Page.DataContext>
        <viewModels:MyViewModel x:Name="ViewModel"/>
    </Page.DataContext>

    <StackPanel Spacing="8">
        <TextBlock Text="{x:Bind ViewModel.Counter, Mode=OneWay}"/>
        <Button
            Content="Click me!"
            Command="{x:Bind ViewModel.IncrementCounterCommand}"/>
    </StackPanel>
</Page>

Button 結至 ICommand viewmodel 中的 ,它會包裝私 IncrementCounter 用方法。 會顯示 TextBlock 屬性的值 Counter ,而且會在每次屬性值變更時更新。

範例

  • 查看 範例應用程式 (適用於多個 UI 架構),以查看 MVVM 工具組的運作情形。
  • 您也可以在單元測試中找到更多範例。