【问题标题】:How to bind command using ReactiveUI and WPF如何使用 ReactiveUI 和 WPF 绑定命令
【发布时间】:2019-10-20 21:26:20
【问题描述】:

我正在尝试在 WPF 中学习 ReactiveUI,但我对如何使用 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);

针对我的具体情况。

非常感谢您的回答。

【问题讨论】:

  • 通常将 rxui 绑定放在视图构造函数后面的代码中。所以在你的情况下MainWindowView。您可能希望使用 WhenActivated() 方法,该方法将在视图不再存在时处理您的绑定。文档中有如何做到这一点。
  • @GlennWatson 指出您在 xaml 页面的代码后面添加代码绑定。这些通常在构造函数中创建。我们有 WPF 示例 github.com/reactiveui/ReactiveUI.Samples/blob/master/wpf/… 将向您展示如何做到这一点。

标签: wpf reactiveui


【解决方案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&lt;MainWindowViewModel&gt; 而不是 Window。另外,不要使用DataContext,而是使用名为ViewModel 的继承属性。

【讨论】:

  • 您不一定要使用ReactiveWindow&lt;MainWindowViewModel&gt;,但它是更简单的方法之一。
  • @GlennWatson ?
  • 谢谢大家。我按照建议尝试了,它按我的意愿工作。我必须阅读这篇文章github.com/reactiveui/ReactiveUI/issues/1684 以了解如何在 xaml 视图中继承 ReactiveWindow。
猜你喜欢
  • 1970-01-01
  • 2020-04-17
  • 1970-01-01
  • 2023-01-27
  • 2016-05-07
  • 2014-05-02
  • 2012-11-30
  • 2023-03-31
  • 2011-07-29
相关资源
最近更新 更多