LongListSelector更改ItemTemplate

时间:2011-08-16 22:21:20

标签: c# windows-phone-7

我想动态更改ItemTemplate的{​​{1}}。我这样做是通过将它绑定到我的ViewModel中的属性:

LongListSelector

到目前为止这是有效的。问题是,如果我在ViewModel中更改模板的属性,则 <toolkit:LongListSelector ItemTemplate="{Binding ItemTemplate}" ItemsSource="{Binding Items}" /> 不会应用更改的模板。

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

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

1 个答案:

答案 0 :(得分:3)

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();
        }
    }
相关问题