如何告诉ReactiveUI更新绑定(即RaiseCanExecuteChanged())?

时间:2015-12-17 18:16:51

标签: reactiveui

如何告诉ReactiveUI更新绑定?

通常情况下,我会这样做:

Submit.RaiseCanExecuteChanged();

但是,不支持以下内容:

public partial class FormViewModel : ReactiveObject
{
    public FormViewModel()
    {
        Submit = ReactiveCommand.Create(this.WhenAnyValue(x => x.CanSubmit));
        Submit.Subscribe(x => OnSubmit());
    }

    bool _canExecute;
    public bool CanSubmit
    {
        get { return !GetUnsatisfied().Any(); }
        set { this.RaiseAndSetIfChanged(ref _canExecute, value); } // Need to update view based on command.CanExecute state change
    }
    void OnSubmit()
    {
        var rosterInfo = new RosterInfo(new Course(CourseInput.Name),
                                        new Instructor(InstructorNameInput, InstructorIdInput));
        var repository = GetRepository();
        repository.AddCourseInfo(rosterInfo);

        Publish(REQUEST_NAVIGATION_TO_SUBMITION_CONFIRMATION, rosterInfo);
    }

    ObservableCollection<RequiredField> GetUnsatisfied()
    {
        RequiredFields.Clear();
        RequiredFields = Review();
        return RequiredFields;
    }
}

因此,如何根据我的命令所依赖的CanExecute谓词强制绑定更新?

更新

=IF(B2=B3,A2&","&C3,A2)

1 个答案:

答案 0 :(得分:2)

多个问题:

阅读array(3) { ["key1"]=> string(19) "key1 from prioritar" ["key2"]=> string(24) "key2 from LESS prioritar" ["my_problem"]=> string(18) "I REACHED MY GOAL!" } 上的fundamentals,特别是如何写“读写属性”。

在你的情况下,只要属性ReactiveObject发生变化,this.WhenAnyValue(x => x.CanSubmit)就会触发命令的刷新,但是这个从来没有,因为你从不调用setter(并且getter的impl不正确)。

目前,您的方法CanSubmit具有“轮询”语义,这意味着您需要触发此方法来更新命令。这根本不是反应性的,你应该绑定/收听更新。

如果您无法使GetUnsatisfied()逻辑被动,那么您可以执行以下操作:

Review()

基本上有一个计时器来做你的polilng。 (但我强烈建议进一步采取反应方式)