2011-11-27 4 views
2

나는 최근 WPF와 같은 질문을 올렸고 대답을 얻었다. 문제는 Silverlight에서 대답이 작동하지 않는다는 것입니다. 다음과 같은 상황이 있습니다. MVVM Light Toolkit을 사용하고 있으며 ObservableCollection에 바인딩 된 DataGrid가 있습니다. 텍스트 열이 하나만 표시됩니다. 표시된 개체 안에있는 부울에 따라 셀의 텍스트를 굵게 또는 표준으로 표시하고 싶습니다. 은 내가 Syle.Trigger와 스타일을 사용하는 WCF에서 작동하게하려면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> 

문제는이 실버 라이트에서 사용할 수없는 것입니다. 나는 약간의 조사를했고 VisualStateManager가 트리거의 "대체물"이라는 것을 알았지 만 DataGridTextColumn을 편집하는 상태를 만들지 못했습니다. GoToState에서 DataStateBehavior ...까지 여러 가지 다른 방법을 시도했지만 지금까지 아무 것도 작동하지 않았습니다.

제발 도와주세요!

들으

답변

3

FontWeight 속성은 DataGridTextColumn 열 유형과 잘 작동하지 않습니다. 따라서이 열을 TextBlock 컨트롤이있는 DataGridTemplateColumn 유형으로 변경하고 표현식 블렌드 데이터 트리거를 적용해야합니다.

<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

관련 문제