проблема с изменением свойства элемента в списке - PullRequest
0 голосов
/ 01 февраля 2012

Я создал список, к которому я могу динамически добавлять и удалять элементы. Пользовательский интерфейс соответствующим образом изменяется и работает нормально.

<ListBox Name="MsgsList" ItemsSource="{Binding Items}" Style="{StaticResource MsgsBoxStyle}">
    <ListBox.ItemTemplate>
        <DataTemplate x:Name="MsgsDataTemplate">
            <StackPanel Tag="{Binding MsgTagInfo}" ManipulationCompleted="StackPanel_Msgs_ManipulationCompleted">

                <toolkit:GestureService.GestureListener>
                    <toolkit:GestureListener Hold="GestureListener_Hold" Tap="GestureListener_Tap"/>
                </toolkit:GestureService.GestureListener>

                <Grid x:Name="ContentPanelInner" Grid.Row="1" Width="500">
                    <StackPanel x:Name="stackPanelInner" Width="500">

                        <Grid VerticalAlignment="Top" Width="500">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition />
                                <ColumnDefinition />
                            </Grid.ColumnDefinitions>

                            <TextBlock Grid.Column="0" Text="{Binding MsgTitle}" Style="{StaticResource MsgLine1}"  />
                            <TextBlock Grid.Column="1" Text="{Binding MsgDate}" Style="{StaticResource MsgDate}" />
                        </Grid>
                        <TextBlock Text="{Binding MsgBody}" Style="{StaticResource MsgLine2}" />
                    </StackPanel>
                </Grid>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

, но я не понимал, как изменить стиль для конкретноготекстовый блок элемента, скажем, на основании какого-то условия, если я хочу изменить цвет текстового поля (ов) конкретного элемента, не уверен, как получить к нему доступ.

Может кто-нибудь, пожалуйста, помогите мне с этим?спасибо.

Ответы [ 2 ]

2 голосов
/ 01 февраля 2012

Вероятно, не самый простой способ сделать это, но, возможно, самый чистый с точки зрения разделения интересов является использование преобразователя и привязка его к свойству, которое вы хотите отслеживать ...

Например, если ваша модель меняет состояние на основе логического свойства myProperty, вы можете использовать что-то вроде этого.

<StackPanel Background={Binding myProperty, Converter={StaticResource myBindingConverter}" />

Ваш конвертер должен возвращать SolidColorBrush в зависимости от стоимости вашего имущества.

public class AlternateRowColour : IValueConverter
{
    SolidColorBrush normal = new SolidColorBrush(Colors.Transparent);
    SolidColorBrush highlighted = new SolidColorBrush(Color.FromArgb(255, 241, 241, 241));

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var myValue = (bool)value
        return myValue ? highlighted : normal ;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
1 голос
/ 01 февраля 2012

I Если вы просто хотите изменить внешний вид стиля элемента, например его цвет, вы можете указать это как свойство объекта модели, который вы привязываете. Например, добавьте свойство TextColor и привяжите его следующим образом:

<TextBlock Text="{Binding MsgBody}" Style="{StaticResource MsgLine2}">
  <TextBlock.Color>
    <SolidColorBrush Color="{Binding TextColor}"/>
  </TextBlock.Color>
</TextBlock>

Это будет иметь приоритет над цветом, определенным через стиль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...