2010-06-08 2 views
3

У меня есть класс под названием Question, который представляет собой вопрос и это ответ. У меня есть приложение, которое отображает ObservableCollection объектов Question. Каждый Question визуализируется как StackPanel, который содержит TextBlock для формулировки вопросов, и TextBox, чтобы пользователь мог ввести ответ. Вопросы обрабатываются с помощью элемента ItemsControl, и я изначально задал стиль StackPanel вопросов, используя ключ StaticResource под названием «IncorrectQuestion» (определен в разделе UserControl.Resources на странице). В разделе UserControl.Resources я также определил ключ calld 'CorrectQuestion', который мне нужно как-то применить к StackPanel вопроса, когда пользователь правильно ответит на вопрос. Моя проблема в том, что я не уверен, как динамически изменять стиль StackPanel, особенно в рамках ограничений класса ViewModel (т. Е. Я не хочу помещать код выбора стиля в код кода View). Мой класс 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

Смежные вопросы