我没有经验,尤其是在MVVM上,但是我尝试使用ReactiveUI,并且我不理解我发现的演示ReactiveCommand的示例。我之前曾经使用过ICommand/DelegateCommand,但这是不同的,我没有得到。我想做的事情很简单。单击 View 中的按钮,并在 View 模型中执行该方法。我发现的所有示例都涉及IObservable ,但我不明白这一点,因为它们没有针对我的总体菜鸟的解释。基本上,我试图将其用作学习体验,而我理想地要做的是将xaml中的按钮的Command属性绑定(bind)到命令(但是,我不知道这是可行的),这会导致一种方法执行。没有集合,我只是传递一个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,-10" Grid.Row="3" Grid.Column="2" />显然我缺少了一些东西。我在AddToDailyUsedExecuted和AddToDailyUsedAction方法中插入了断点,但这些断点从未到达。 编辑构造函数,以获取 View 后的代码: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 nullMyCommand.Where(param => this.UserName != null) .Subscribe(param => this.MyCommandHasExecuted()); 更新:您的Xaml绑定(bind)到AddToTodayUsed,但是您的ViewModel命令称为AddToDailyUsed。可以吗?关于mvvm - 有谁知道ReactiveUI的ReactiveCommand的一个很好的例子吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14794841/
10-11 17:19