Изменение цвета элемента LongListSelector или Listbox, который связан - PullRequest
2 голосов
/ 20 ноября 2011

Я пытался изменить цвет TextBlock в ListBox, который получает цвет от привязки.

<TextBlock Text="{Binding Title}" TextWrapping="Wrap" Foreground="{Binding ItemColor, Converter={StaticResource ColorConverter}}" Style="{StaticResource posttitle}" d:LayoutOverrides="Width"/>

Вот конвертер, который работает во время начального рендеринга:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    if (value == null)
        return new SolidColorBrush(Colors.Red);

    Color colorValue = (Color)value;

    return new SolidColorBrush(colorValue);
}

Во время события SelectionChanged я назначил элементу новый цвет:

private void List_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var listbox = (LongListSelector)sender;

    if (listbox.SelectedItem == null)
        return;

    MyItem item = (MyItem)listbox.SelectedItem;

    if (item.Clicked)
    {
        // Change some value
        item.Clicked = true;
        item.ItemColor = new Color() { A = 0xFF, R = 0xBD, G = 0xB7, B = 0x6B };
    }
}

Если я поставлю точку останова и проверим текст данных, то увижу, что значение в источнике изменилось, но визуально LongListSelector не меняет внешний вид. Привязка к ObservableCollection и ItemColor уведомляет об изменении.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 13 декабря 2011

Вы не предоставили достаточно информации, но, исходя из предоставленного вами кода, похоже, что при установке item.ItemColor событие PropertyChanged для ItemColor не вызывается.

MyItem следуетвнедрить INotifyPropertyChanged и позвонить PropertyChanged(this, new PropertyChangedEventArgs("ItemColor")).

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