У меня проблема с фрагментом кода, который начинает выводить меня из себя. У меня есть базовый класс в WPF с объявленным DependencyProperty:
public partial class AudioTimeControlBase : UserControl
{
public static readonly DependencyProperty PlaybackPositionProperty = DependencyProperty.RegisterAttached(
"PlaybackPosition", typeof(TimeSpan), typeof(AudioTimeControlBase),
new FrameworkPropertyMetadata(TimeSpan.Zero,
FrameworkPropertyMetadataOptions.Inherits |
FrameworkPropertyMetadataOptions.AffectsRender |
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
OnPlaybackPositionChanged, CoercePlaybackPosition));
public TimeSpan PlaybackPosition
{
get { return (TimeSpan)this.GetValue(PlaybackPositionProperty); }
set { this.SetValue(PlaybackPositionProperty, value); }
}
private static void OnPlaybackPositionChanged(object sender, DependencyPropertyChangedEventArgs e)
{
AudioTimeControlBase control = sender as AudioTimeControlBase;
if (control != null)
control.OnPlaybackPositionChanged(e);
}
protected virtual void OnPlaybackPositionChanged(DependencyPropertyChangedEventArgs e)
{
}
private static object CoercePlaybackPosition(DependencyObject d, object value)
{
TimeSpan t = (TimeSpan)value;
if(t < TimeSpan.Zero)
return TimeSpan.Zero;
return t;
}
}
Затем производный элемент управления:
public partial class WaveViewerControl : AudioTimeControlBase
{
public WaveViewerControl()
{
InitializeComponent();
}
void playbackControl_PositionChanged(object sender, EventArgs e)
{
PlaybackPosition = ConvertFromPosition(playbackControl.Position);
}
}
Я вытащил изрядное количество вещей, но я действительно думаю, что выделил оскорбительные части этого. Проблема заключается в том, что, когда происходит воспроизведениеControl_PositionChanged (в результате действий пользователя), оно нарушает (ранее работающую) привязку к PlaybackPositionProperty и элемент управления не получает последующих обновлений. Если у кого-то есть какие-либо мысли или наводки, я буду вечно благодарен. Спасибо!
ОБНОВЛЕНИЕ : я понимаю, что исключил из этого некоторую потенциально важную информацию - этот элемент управления не представлен непосредственно в моем XMAL, но программно добавлен в родительский элемент управления. Однако, согласно опции «Inhert», привязки этого родителя правильно наследуются. Только после вызова SetValue они явно переопределяются. Означает ли это, что двустороннее связывание не поддерживается унаследованными свойствами?