У меня есть кнопка «Закрыть» и Expander связаны с моей точки зрения MVVM так:ReactiveUI: R/W свойства против вывода Свойства
this.BindCommand(ViewModel, vm => vm.CloseResults, v => v.CloseButton);
this.OneWayBind(ViewModel, vm => vm.HasExecuted, v => v.Panel.IsExpanded);
Если пользователь нажимает на кнопку, расширитель должен быть разрушилась. В модели представления, у меня есть ReactiveCommand, которые должны заботиться об этом:
public ReactiveCommand<object> CloseResults { get; protected set; } =
ReactiveCommand.Create();
В модели представления, HasExecuted
является выход недвижимости, который предполагается развернуть/свернуть расширитель в зависимости от его значения:
private readonly ObservableAsPropertyHelper<bool> _hasExecuted;
public bool HasExecuted => _hasExecuted.Value;
так подключить команду с помощью кнопки, я привязки HasExecuted
к команде, как так:
CloseResults.Select(_ => false).ToProperty(this, vm => vm.HasExecuted, out _hasExecuted);
Это, кажется, не делать nything. Однако, если я использую свойство read-write вместо этого и подключаю его следующим образом:
CloseResults.Subscribe(_ => { HasExecuted = false; });
он отлично работает. Может ли кто-нибудь объяснить, почему свойство Output не работает в этом случае? Разве не расширение ToProperty
должно подписываться на IOberservable<bool>
, что возвращается Select(_ => false)
?
Я все еще посередине, чтобы получить все это, так что, возможно, что-то очевидное, что мне не хватает.
Кажется, что HasExecuted наблюдается всегда будет ложным. Также вы не можете установить его, потому что он только для чтения. – kenny
Ну, 'HasExecuted' ранее установлен в true, вот почему панель расширена в первую очередь. И только для чтения член является 'ObservableAsPropertyHelper', а не сам bool? –
phreezie