Silverlight ~ MVVM ~ Динамическая настройка свойства Style на основе значения модели - PullRequest
3 голосов
/ 08 июня 2010

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

1 Ответ

3 голосов
/ 09 июня 2010

Использование преобразователя значений - это решение.

<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 на основе этого сообщения в блоге . Создано как: -

public class BoolToStyleConverter : BoolToValueConverter<Style> { }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...