Как связать команду, используя ReactiveUI и WPF - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь изучить ReactiveUI в WPF, и я не понимаю, как связать команду, используя привязку Reactive UI (не привязку Xaml по умолчанию). Я прочитал в документации ReactiveUI, что правильный способ - использовать следующую инструкцию:

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

Теперь, если у меня есть MainWindowView.xaml (View):

        <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 Ответ

1 голос
/ 22 октября 2019

Примеры 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.

...