LongListSelector изменить ItemTemplate - PullRequest
3 голосов
/ 17 августа 2011

Я хочу динамически изменить ItemTemplate из LongListSelector. Я делаю это, привязывая его к свойству в моей ViewModel:

  <toolkit:LongListSelector ItemTemplate="{Binding ItemTemplate}" ItemsSource="{Binding Items}" />

Пока это работает. Проблема в том, что если я изменю свойство для шаблона в моей ViewModel, то LongListSelector не применяет измененный шаблон.

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

Это ошибка или невозможно изменить ItemTemplate через привязку?

1 Ответ

3 голосов
/ 17 августа 2011

LongListSelector игнорирует изменения своего ItemTemplate. Определение DependencyProperty в LongListSelector выглядит следующим образом:

public static readonly DependencyProperty ItemsTemplateProperty =
        DependencyProperty.Register("ItemTemplate", typeof(DataTemplate), 
                                     typeof(LongListSelector), 
                                     new PropertyMetadata(null));

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

    public static readonly DependencyProperty ItemsTemplateProperty =
        DependencyProperty.Register("ItemTemplate", typeof(DataTemplate), 
                                     typeof(LongListSelector), 
                                     new PropertyMetadata(null, 
                                                          OnItemsTemplateChanged));

    private static void OnItemsTemplateChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
    {
        ((LongListSelector)obj).OnItemsTemplateChanged();
    }

    private void OnItemsTemplateChanged()
    {
        _flattenedItems = null;
        if (_isLoaded)
        {
            EnsureData();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...