Как дождаться обновления ObservableAsPropertyHelper в ReactiveUI - PullRequest
0 голосов
/ 16 июня 2020

У меня есть метод, в котором я изменяю свойство, которое вызывает изменение другого свойства, поддерживающее поле которого имеет тип ObservableAsPropertyHelper. Дополнительное поле ObservableAsPropertyHelper вызывает изменение вложенного представления, поэтому для его активации требуется некоторое время. Пока не будет активировано, у меня есть свойство null in, которое зависит от ObservableAsPropertyHelper, и мне нужно подождать, но я не знаю как.

У меня есть образец кода.

public class MainViewModel : ReactiveObject
{
    private string _carModelName;
    private readonly ObservableAsPropertyHelper<ICarModel> _carViewModel;

    public MainViewModel()
    {
        this.LoadConfigurationCommand = ReactiveCommand.Create(this.LoadConfiguration);

        this.WhenAnyValue(x => x.CarModelName)
            .Select<string, ICarModel>(x =>
            {
                switch (x)
                {
                    case "VW":
                        return new VWModel();
                    case "BMW":
                        return new BMWViewModel();
                    default:
                        return null;
                }
            })
            .ToProperty(this, x => x.CarViewModel, out _carViewModel);

        this.CarModelName = "VW";
    }

    public string CarModelName
    {
        get => _carModelName;
        set => this.RaiseAndSetIfChanged(ref _carModelName, value);
    }

    public ICarModel CarViewModel => _carViewModel.Value;

    public ReactiveCommand<Unit, Unit> LoadConfigurationCommand { get; }        

    private LoadConfiguration()
    {
        // code which loads configuration

        this.CarModelName = configurationCarModelName; // "BMW"

        // now I want to call CarViewModel, but I have null, because modification of property is in progress
        this.CarViewModel as ICarModel;
        this.CarViewModel.Load(configurationObject);

        // how to wait for CarViewModel update to call Method with parameters?
    }
}

1 Ответ

2 голосов
/ 17 июня 2020

Итак, вы можете отреагировать на изменение и просто вызвать команду. Как только вы начнете декларативный путь, вам просто нужно объявить, что должно происходить в ответ на другие вещи. Итак, «Когда свойство моей виртуальной машины изменяется, я хочу делать это».

this.WhenAnyValue(x => x.CarModelName)
.Select<string, ICarModel>(x =>
{
    switch (x)
    {
        case "VW":
            return new VWModel();
        case "BMW":
            return new BMWViewModel();
        default:
            return null;
    }
})
.InvokeCommand(this, x => x.CarViewModel.Thing);

public interface ICarModel
{
    ReactiveCommand<Unit, Unit> Thing { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...