>假设我有 2 个属性CantTouchThis.First
和CantTouchThis.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.First
和CantTouchThis.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;
}
}