2011-11-27 12 views
2

我最近發佈了同樣的問題,但對於WPF並得到了答案。問題是,答案在Silverlight中無效。 以下是這種情況:我使用MVVM Light Toolkit,並將DataGrid綁定到ObservableCollection。只顯示一個文本列。我希望單元格的文本爲Bold或Normal,具體取決於所顯示對象內部的布爾值。 使它在WCF工作,我使用的樣式與Syle.Trigger:如何根據在Silverlight中使用MVVM綁定的數據更改DataGrid的單元格?

<DataGrid.Resources> 
     <Style x:Key="Style1" TargetType="{x:Type TextBlock}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsRead}" Value="False"> 
        <Setter Property="FontWeight" Value="Bold" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.Resources> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding Title}" ElementStyle="{StaticResource ResourceKey=Style1}" /> 
    </DataGrid.Columns> 

的問題是,這是不是在Silverlight中可用。我做了一些研究,發現VisualStateManager是觸發器的「替代品」,但我從未設法創建編輯DataGridTextColumn的狀態。我嘗試了一堆從GoToState到DataStateBehavior的不同方式......到目前爲止沒有任何工作。

請幫忙!

THX

回答

3

FontWeight屬性沒有很好地與DataGridTextColumn列類型的工作。因此,您應該將此列更改爲DataGridTemplateColumn類型,其中內部爲TextBlock控件,並將表達式混合數據觸發器應用於其中。

下面是代碼:

<sdk:DataGridTemplateColumn> 
    <sdk:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Title}" VerticalAlignment="Center"> 
       <i:Interaction.Triggers> 
        <ic:DataTrigger Binding="{Binding IsRead}" Value="False"> 
         <ic:ChangePropertyAction PropertyName="FontWeight" > 
          <ic:ChangePropertyAction.Value> 
           <FontWeight>Bold</FontWeight> 
          </ic:ChangePropertyAction.Value> 
         </ic:ChangePropertyAction> 
        </ic:DataTrigger> 
       </i:Interaction.Triggers> 
      </TextBlock> 
     </DataTemplate> 
    </sdk:DataGridTemplateColumn.CellTemplate> 
</sdk:DataGridTemplateColumn> 

的命名空間iic的方式規定:

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 
xmlns:ic="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions" 

必要的庫成爲當你安裝的Expression Blend SDK中提供。

如果沒有SDK,您可以使用另一種方法,寫一個值轉換器:

<TextBlock Text="{Binding Title}" VerticalAlignment="Center" 
    FontWeight="{Binding IsRead, Converter={StaticResource BooleanToFontWeightConverter}}" /> 
+0

它的作品!謝謝 !!我爲IsRead的值「True」和FontWeight的Normal添加了第二個DataTrigger,以便在bool更改爲true時恢復正常。我覺得很奇怪,雖然「FontWeight屬性不適用於DataGridTextColumn列類型」。對我來說,文本和字體是兄弟姐妹:)。再次感謝您的幫助。 – DEIONaLiMs

相關問題