2010-06-08 2 views
3

질문을 나타내는 답변이있는 Question 클래스가 있는데 답변입니다. ObservableCollection을 Question 개체로 렌더링하는 응용 프로그램이 있습니다. 각 Question은 질문 문구에 대한 TextBlock을 포함하는 StackPanel로 렌더링되고 사용자가 대답에 입력 할 TextBox로 렌더링됩니다. 질문은 ItemsControl을 사용하여 렌더링되고 처음에는 StaticResource 키 'IncorrectQuestion'(페이지의 UserControl.Resources 섹션에 정의 됨)을 사용하여 질문의 StackPanel 스타일을 설정했습니다. 또한 UserControl.Resources 섹션에서 사용자가 질문에 올바르게 대답 할 때 질문의 StackPanel에 어떻게 든 적용해야하는 키인 'CorrectQuestion'을 정의했습니다. 내 문제는 StackPanel의 스타일을 ViewModel 클래스의 제약 조건 내에서 동적으로 변경하는 방법을 잘 모르겠습니다 (즉, 뷰의 코드 숨김에 스타일 선택 코드를 넣고 싶지 않음). 내 Question 클래스는 수정 될 때 정확히 설정되는 IsCorrect 속성을 가지고 있습니다. 어떻게 든 스타일 선택의 형태로 IsCorrect 값을 반영하고 싶습니다. 어떻게해야합니까?Silverlight ~ MVVM ~ 모델 값을 기반으로 한 Style 속성의 동적 설정

답변

3

값 변환기를 사용하는 것이 해결책입니다.

<Grid x:Name="LayoutRoot" Background="White"> 
    <Grid.Resources> 
     <local:BoolToStyleConverter x:Key="Correctness"> 
      <local:BoolToStyleConverter.FalseValue> 
       <Style TargetType="TextBox"> 
        <Setter Property="Background" Value="Salmon" /> 
       </Style> 
      </local:BoolToStyleConverter.FalseValue> 
      <local:BoolToStyleConverter.TrueValue> 
       <Style TargetType="TextBox"> 
        <Setter Property="Background" Value="AliceBlue" /> 
       </Style> 
      </local:BoolToStyleConverter.TrueValue> 
     </local:BoolToStyleConverter> 
    </Grid.Resources> 
    <ItemsControl ItemsSource="{Binding}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <StackPanel> 
        <TextBlock Text="{Binding Question}" /> 
        <TextBox x:Name="Answer" Text="{Binding Answer, Mode=TwoWay}" 
         Style="{Binding IsCorrect, Converter={StaticResource Correctness}}" /> 
       </StackPanel> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl>   
</Grid> 

당신은 BoolToStyleConverter을위한 기초를 찾을 수이 blog post을 기반으로합니다. 다음으로 생성 : -

public class BoolToStyleConverter : BoolToValueConverter<Style> { } 
+0

나는 값 변환기를 사용해 보았지만 작동시키지 못했습니다. 나는 뭔가 잘못하고있는 것 같아. 나는 그 옵션을 재검토 할 것이다. 건배! – eponymous23