2012-01-12 314 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> 
相關問題