public PropertyChangeNotifier(DependencyObject propertySource, PropertyPath property) { propertySource.CheckNotNull(nameof(propertySource)); property.CheckNotNull(nameof(property)); _propertySource = new WeakReference(propertySource); var binding = new Binding { Path = property, Mode = BindingMode.OneWay, Source = propertySource }; BindingOperations.SetBinding(this, ValueProperty, binding); }
protected static void OnContentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var p = (MediaPlayerBase)d.CheckNotNull(nameof(d)); if (e.OldValue is PlayerHostBase oldValue) { oldValue.MediaLoaded -= p.Player_MediaLoaded; oldValue.MediaUnloaded -= p.Player_MediaUnloaded; p._positionChangedNotifier !.ValueChanged -= p.Player_PositionChanged; p._positionChangedNotifier = null; } if (e.NewValue is PlayerHostBase newValue) { newValue.MediaLoaded += p.Player_MediaLoaded; newValue.MediaUnloaded += p.Player_MediaUnloaded; p._positionChangedNotifier = new PropertyChangeNotifier(newValue, "Position"); p._positionChangedNotifier.ValueChanged += p.Player_PositionChanged; } p.OnContentChanged(e); }
private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var notifier = (PropertyChangeNotifier)d.CheckNotNull(nameof(d)); notifier.ValueChanged?.Invoke(notifier.PropertySource, EventArgs.Empty); }