绑定到属性的WPF按钮Convertback IMultiValueConverter不更新值

问题描述 投票:0回答:1

我在后面的代码中连接了一个切换按钮。我想将isChecked状态从一个按钮绑定到4个视频控件以切换静音功能。我正在使用multibinding将切换按钮绑定到4个不同的控件。我的问题是使用断点我可以看到所有内容都被触发到每个对象的属性静音属性,但属性“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次,但是当我跟踪它时,value参数保持在先前设置的值,并且不会更新以反映通过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天了。

在我看来,使用multibinding是一种有效的方式来连接4个单独的控件播放器并将它们绑定到一个按钮点击。

c# wpf binding converters multibinding
1个回答
0
投票

好吧,我再次尝试了几个选项,除了单击按钮事件中的代码之外,它们都没有工作

多重绑定根本不起作用。我可以在断点中看到,对于4个控件,Mute属性被调用4次,但value参数永远不会更新为新的属性值。

我也尝试将一个按钮绑定到4个不同的控件

foreach(Player player in lsPlayers)
{
    btnMuteToggle.SetBinding(SimpleButton.IsCheckedProperty, new Binding("Mute")
       {
         Source = player,
         UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
         Mode = BindingMode.OneWayToSource
        });
}

这只会导致调用一个播放器对象静音属性。您不能将多个控件绑定到同一个按钮。它只是不起作用。

所以我只是在点击事件中调用了4个对象。

© www.soinside.com 2019 - 2024. All rights reserved.