У меня есть привязка от переключателя, подключенного в коде сзади.
Я хочу связать состояние isChecked от одной кнопки до 4 элементов управления видео, чтобы включить функцию отключения звука. Я использую мультисвязывание, чтобы привязать кнопку переключения к 4 различным элементам управления. Моя проблема заключается в использовании точек останова. Я вижу, что все запускается вплоть до свойства mute свойства каждого объекта, но параметр свойства value никогда не обновляется. При создании элементов управления остается значение по умолчанию.
Итак, сначала я создаю привязки в коде
IMultiValueConverter converter = new EmptyMultiValueConverter();
MultiBinding myMultiBinding = new MultiBinding();
myMultiBinding.Converter = converter;
myMultiBinding.UpdateSourceTrigger = UpdateSourceTrigger.Default;
myMultiBinding.Mode = BindingMode.OneWayToSource;
myMultiBinding.NotifyOnSourceUpdated = true;
for (int i = 1; i < _maxNumberofPlayers; i++)
{
VideoPlayer player = new VideoPlayer()
{
Mute = false
};
myMultiBinding.Bindings.Add(new Binding("Mute") { Source = player
});
}
btnMuteToggle.SetBinding(SimpleButton.IsCheckedProperty, myMultiBinding);
Кажется, все это работает, потому что, когда я нажимаю на кнопку, которую вижу в многозначном конвертере, правильное состояние кнопки isChecked приходит к точкам останова, в ConvertBack ниже я могу подтвердить, что это правильное значение bool, отражающее состояние кнопки переключения .
public class EmptyMultiValueConverter : IMultiValueConverter
{
#region IMultiValueConverter Members
public object Convert(object[] values, Type targetType, object
parameter, System.Globalization.CultureInfo culture)
{
// gets from the object source
return (bool)values[0];
}
public object[] ConvertBack(object value, Type[] targetTypes, object
parameter, System.Globalization.CultureInfo culture)
{
return new Object[] {value,value,value,value};
}
#endregion
}
В этот момент я могу подтвердить, что он обращается к свойству Mute и запускает SET 4 раза, но когда я прослеживаю его, параметр значения остается на ранее установленном значении и не обновляется, чтобы отразить значение, переданное ему через ConvertBack
// mute property in the media player user control
public bool Mute
{
get { return _media.IsMuted; }
set
{
if (_media.IsMuted == value)
return;
else
{
_media.IsMuted = value;
NotifyPropertyChanged("Mute");
}
}
}
Может кто-нибудь помочь, пожалуйста.
Вырвали мои волосы в течение 3 дней.
Мне показалось, что использование мультисвязывания - это эффективный способ подключить 4 отдельных игрока управления и привязать их одним нажатием кнопки.