加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

mvvm – 有没有人知道ReactiveUI的ReactiveCommand的一个很好的

发布时间:2020-12-14 02:03:34 所属栏目:Windows 来源:网络整理
导读:我没经验,特别是在MVVM,但尝试使用ReactiveUI,我不理解我发现的演示ReactiveCommand的示例.我曾经使用过一次ICommand / DelegateCommand,但这是不同的,我没有得到它. 我想做的事情非常简单.单击视图中的按钮,然后在视图模型中执行该方法.我发现的所有例子都
我没经验,特别是在MVVM,但尝试使用ReactiveUI,我不理解我发现的演示ReactiveCommand的示例.我曾经使用过一次ICommand / DelegateCommand,但这是不同的,我没有得到它.

我想做的事情非常简单.单击视图中的按钮,然后在视图模型中执行该方法.我发现的所有例子都涉及IObservable<>,我不明白,因为他们没有解释那些适合我的总菜鸟.

基本上,我正在尝试将其用作学习体验,而我理想的做法是将xaml中按钮的Command属性绑定到命令(但是这有效,我不知道),这会导致一个方法执行.没有集合,我只是传递一个int变量.

谢谢您的帮助.对此,我真的非常感激.

编辑 – 使用Paul Betts的建议下面显示代码:

C#

public ReactiveCommand AddToDailyUsed { get; protected set; }

public MainPageVM()
{
    Initialize();
    AddToDailyUsed = new ReactiveCommand();
    AddToDailyUsed.Subscribe(AddToTodayUsedAction => this.AddToDailyUsedExecuted());
}

private object AddToDailyUsedExecuted()
{
    MessageBox.Show("AddToDailyUsedAction");
    return null;
}

private void AddToDailyUsedAction(object obj)
{
    MessageBox.Show("AddToDailyUsedAction");
}

XAML

<Button Content="{Binding Strings.add,Source={StaticResource LocalStrings}}"
        Command="{Binding AddToTodayUsed}"
        Margin="-5,-10,-10"
        Grid.Row="3"
        Grid.Column="2" />

显然我错过了一些东西.我在AddToDailyUsedExecuted和AddToDailyUsedAction方法中插入了断点,但它们永远不会到达.

编辑构造函数以查看视图后面的代码:

MainPageVM mainPageVM = new MainPageVM();

public MainPage()
{
    InitializeComponent();
    Speech.Initialize();
    DataContext = mainPageVM;
    ApplicationBar = new ApplicationBar();
    TaskRegistration.RegisterScheduledTask();

    this.Loaded += new RoutedEventHandler(MainPage_Loaded);

    //Shows the rate reminder message,according to the settings of the RateReminder.
    (App.Current as App).rateReminder.Notify();
}

解决方法

因此,ReactiveCommand本身就是一个IObservable< object> – 在这种情况下,您可以将IObservable概念化为事件 – 当调用命令时(即按下按钮时)将触发此事件.所以,在你的构造函数中,你可能会写:

MyCommand = new ReactiveCommand();
MyCommand.Subscribe(param => this.MyCommandHasExecuted());

但是,关于IObservable的常规事件不正确的是,你可以在它们上使用LINQ:

// Now,MyCommandHasExecuted only gets run when the UserName isn't null
MyCommand.Where(param => this.UserName != null)
    .Subscribe(param => this.MyCommandHasExecuted());

更新:您的Xaml绑定到AddToTodayUsed但您的ViewModel命令称为AddToDailyUsed.可能是吗?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读