【发布时间】:2014-02-28 01:50:32
【问题描述】:
假设我有 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>
【问题讨论】:
-
您希望多重绑定如何工作?您想要汇总(添加)这些值吗?
-
不只是重复,即 First == Second == Slider1.Value == Slider2.Value 解决方案不必是
IMultiValueConverter,但在这种情况下可以使用一个? -
You need a DataTrigger for this - 当 CheckBox 上 IsChecked 属性的值发生变化时评估触发器。
-
将绑定从常规绑定更改为多绑定的 DataTrigger?
-
您采用的方法取决于您想要实现的目标的复杂性 - 您可能希望根据复选框值换出模板化区域/样式。
标签: wpf multibinding