如何使用ReactiveUI和WPF绑定命令

时间:2019-10-20 21:26:20

标签: wpf reactiveui

我正在尝试在WPF中学习ReactiveUI,并且我对如何使用Reactive UI绑定(不是默认的Xaml绑定)来绑定命令感到困惑。 我在ReactiveUI文档中读到,正确的方法是使用以下指令:

this.BindCommand(this.ViewModel, vm => vm.MyCommand, v => v.myControl);

现在,如果我在MainWindowView.xaml(查看)中了:

        <Button x:Name="TestButton" Command="{Binding Click}" />

在MainWindowView的代码后面:

    public partial class MainWindowView : Window
    {
       public MainWindowView()
       {
             InitializeComponent();
             DataContext = new MainWindowViewModel();
       }
    }

并在MainWindowViewModel(ViewModel)中:

    class MainWindowViewModel : ReactiveObject
    {
       public ReactiveCommand<Unit, Unit> ClickCommand { get; }

       public MainWindowViewModel()
       {
           ClickCommand = ReactiveCommand.Create(ClickMethod);
       }

       void ClickMethod()
       {
           // Code for executing the command here.
       }
   }

我不知道在哪里插入以及如何编写第一条指令:

this.BindCommand(this.ViewModel, vm => vm.MyCommand, v => v.myControl);

针对我的具体情况。

非常感谢您的回答。

1 个答案:

答案 0 :(得分:1)

Rodney Littles在上面的评论中引用的WPF示例非常好。对于您的情况,应该是这样的:

public partial class MainWindowView : ReactiveWindow<MainWindowViewModel>
{
    public MainWindowView()
    {
        InitializeComponent();
        ViewModel = new MainWindowViewModel();

        this
            .WhenActivated(disposables => {
                this
                    .BindCommand(this.ViewModel, vm => vm.ClickCommand, v => v.TestButton)
                    .DisposeWith(disposables);
        });
    }
}

确保您从ReactiveWindow<MainWindowViewModel>而不是Window派生。此外,请使用名为DataContext的继承属性代替ViewModel