2012-01-12 84 views
2

我能够将我的数据源绑定到显示文本的文本块。但是,如果选中复选框foo的值,我想将Fontweight设置为粗体。我正在尝试使用IMultiValueConverter来完成此操作,但迄今为止没有运气。任何想法,我做错了什么?如何在同一个WPF控件上绑定多个属性?

<CheckBox Name="foo"/> 
<TextBlock Name="bar" Text="{Binding Path=Name}"> 
    <TextBlock.FontWeight> 
     <MultiBinding Converter="{StaticResource FontConverter}"> 
      <Binding RelativeSource="{RelativeSource self}" Path="???"/> 
      <Binding ElementName="???" /> 
     </MultiBinding> 
    </TextBlock.FontWeight> 
</TextBlock> 

和转换器类(就硬总是对现在回到粗体)

Public Class FontConverter 
    Implements IMultiValueConverter 

    Public Function Convert(values() As Object, targetType As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IMultiValueConverter.Convert 
     Return "Bold" 
    End Function 

    Public Function ConvertBack(value As Object, targetTypes() As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object() Implements System.Windows.Data.IMultiValueConverter.ConvertBack 
     Return nothing 
    End Function 
End Class 

回答

3

如果你想使用你应该绑定到CheckBox.IsChecked{Binding IsChecked, ElementName=foo})转换器,你不需要MultiBinding,然后在Convertvalue转换为bool并基于该值返回正常或粗体(优选地作为实际的FontWeight而不是string)。

但是,在这里,我会建议在IsCheckedDataTrigger

例如

<TextBlock Text="{Binding Name}"> 
    <TextBlock.Style> 
     <Style TargetType="TextBlock"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsChecked, ElementName=foo}" 
          Value="true"> 
        <Setter Property="FontWeight" Value="Bold"/> 
       </DataTrigger > 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 

(还要注意dependency property precedence,如果设置fontWeight设置本地触发不会做任何事情)基于XAML中的条件

+0

哦嘘,当我写我的回答你必须贴有没有代码示例一个不完整的答案。发布后,我发现你已经更新了你的代码示例。哦,+1,用于指出DP优先级并发布我做过的同样的事情:) – Rachel 2012-01-12 17:11:50

+0

工作得很好。 TY2 @Rachel – WhiskerBiscuit 2012-01-12 17:16:08

+0

@Rachel:之前我们谈过这个,代码是*不*必需的,我甚至不确定为什么我这次还添加了一些。毕竟经验表明,人们在尝试添加代码时经常犯错误(正如你在这里所做的那样,如果你注意到的话)。 – 2012-01-12 17:18:18

2

任何应在TriggerDataTrigger来完成。将值从一个值转换为另一个值时应使用Converters

下面是一个例子:

<CheckBox Name="foo"/> 
<TextBlock Name="bar" Text="{Binding Path=Name}"> 
    <TextBlock.Style> 
     <Style TargetType="{x:Type TextBlock}"> 
      <Setter Property="FontWeight" Value="Normal" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ElementName=foo, Path=IsChecked}" Value="True"> 
        <Setter Property="FontWeight" Value="Bold" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 
相关问题