其他分享
首页 > 其他分享> > CodeGo.net> LongListSelector更改ItemTemplate

CodeGo.net> LongListSelector更改ItemTemplate

作者:互联网

我想动态更改LongListSelector的ItemTemplate.我通过将其绑定到ViewModel中的属性来实现此目的:

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

到目前为止,该方法有效.问题是,如果我在ViewModel中更改模板的属性,则LongListSelector不会应用更改后的模板.

我在调试器中查看了一下,每当我使用它的setter更改属性时,就会依次调用getter,因此LongListSelector会读取新模板(但不应用它).

这是一个错误,还是无法通过绑定更改ItemTemplate?

解决方法:

LongListSelector忽略对其ItemTemplate的更改. LongListSelector中的DependencyProperty定义如下所示:

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();
        }
    }

标签:windows-phone-7,c
来源: https://codeday.me/bug/20191208/2088509.html