2010-06-08 44 views
3

我有一个名为Question的类,它表示一个问题,它是答案。我有一个应用程序呈现一个ObservableCollection Question对象。每个Question都被渲染为一个StackPanel,其中包含用于问题的文本块以及供用户输入答案的TextBox。问题使用ItemsControl呈现,并且我最初使用名为'IncorrectQuestion'(在页面的UserControl.Resources部分中定义)的StaticResource项设置了问题的StackPanel的样式。在UserControl.Resources部分,我还定义了一个关键字'''''''''''''''''''''''',这正是我需要在用户正确回答问题时以某种方式应用到问题的StackPanel中的一种方式。我的问题是我不知道如何动态地改变StackPanel的Style,特别是在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。 Created: -

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

我试过使用价值转换器,但我没有得到它的工作。我认为我只是在做错事。我会重新审视这个选项。干杯! – eponymous23 2010-06-10 15:16:57