WPF:如何将绑定到两个不同控件的两个属性绑定在一起



>假设我有 2 个属性CantTouchThis.FirstCantTouchThis.Second其中CantTouchThis意味着我无法挂钩到它们的INotifyPropertyChanged实现中。

我可以将它们绑定到两个滑块:

<Slider Value="{Binding CantTouchThis.First, Mode=TwoWay}" />
<Slider Value="{Binding CantTouchThis.Second, Mode=TwoWay}" />
<!-- textblocks just to display the values -->
<TextBlock Text="{Binding CantTouchThis.First, StringFormat={}{0:0.00}}" />
<TextBlock Text="{Binding CantTouchThis.Second, StringFormat={}{0:0.00}}" />

如何创建一个复选框(如果选中)将两个滑块绑定在一起,CantTouchThis.FirstCantTouchThis.Second

<CheckBox IsChecked="True" Content="Bind both together." Name="bindUsCheckbox" />

帮助总是不胜感激,

马克

编辑

我开始尝试使用IMultiValueConverter来完成此操作,但在尝试将其设置为复选框的条件时卡住了:

public class DuplicateValuesConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return values[0];
    }
    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        object[] output = new object[2];
        output[0] = value;
        output[1] = value;         
        return output;
    }
}

以及这样的绑定:

        <Slider.Value>
            <MultiBinding Converter="{StaticResource magicConverter}" Mode="TwoWay">
                <Binding Path="First" />
                <Binding Path="Second" />
            </MultiBinding>
        </Slider.Value>

包括复选框。多重绑定中的已检查值。使用 converterParameter 标识它是哪个滑块,并在不同步时返回它的值。

<Slider.Value>
   <MultiBinding Converter="{StaticResource magicConverter}" Mode="TwoWay" ConverterParamter='0'>
        <Binding Path="First" />
        <Binding Path="Second" />
        <Binding ElementName="bindUsCheckbox" Path="IsChecked" />
   </MultiBinding>
</Slider.Value>

并像这样处理它:

public class DuplicateValuesConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        if (bool.Parse(value[2].ToString()))
        { // keep sync
            return values[0];
        }
        else
        {
            return values[int.Parse(parameter.ToString())];
        }
    }
    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        object[] output = new object[2];
        output[0] = value;
        output[1] = value;         
        return output;
    }
}

相关内容

  • 没有找到相关文章

最新更新