2017-01-07 2 views
2

У меня естьМожно ли явным образом вызвать RaisePropertyChanged для зависимых свойств?

public override bool RelatedProperty 
    { 
     get { return this.SomeProperty > 0; } 
    } 

    public int SomeProperty 
    { 
     get { return this.someProperty; } 
     protected set 
     { 
      this.Set<int>(ref this.someProperty, value); 
      this.RaisePropertyChanged(nameof(this.RelatedProperty)); 
     } 
    } 

RelatedProperty, где, очевидно, зависит от SomeProperty.

Есть ли лучший способ обновить привязку, чем использовать RaisePropertyChanged для RelatedProperty, от сеттера SomeProperty?

ответ

1

Есть ли лучший способ обновить привязку, чем ссылаться на RaisePropertyChanged для RelatedProperty, из установщика SomeProperty?

Нет. По крайней мере, не использовать MvvmLight и императивный подход к реализации свойств.

Если вы использовали реактивную структуру пользовательского интерфейса, такие как ReactiveUI вы бы обрабатывать изменения свойств в функционально:

public class ReactiveViewModel : ReactiveObject 
{ 
    public ReactiveViewModel() 
    { 
     this.WhenAnyValue(x => x.SomeProperty).Select(_ => SomeProperty > 0) 
      .ToProperty(this, x => x.RelatedProperty, out _relatedProperty); 
    } 

    private int _someProperty; 
    public int SomeProperty 
    { 
     get { return _someProperty; } 
     set { this.RaiseAndSetIfChanged(ref _someProperty, value); } 
    } 

    private readonly ObservableAsPropertyHelper<bool> _relatedProperty; 
    public bool RelatedProperty 
    { 
     get { return _relatedProperty.Value; } 
    } 
} 

Вы можете прочитать об этом подробнее в документации для ReactiveUI и на создателя Paul Betts' блог, если вы заинтересованы:

https://docs.reactiveui.net/en/fundamentals/functional-reactive-programming.html http://log.paulbetts.org/creating-viewmodels-with-reactiveobject/

Смежные вопросы