我想动态更改ItemTemplate
的{{1}}。我这样做是通过将它绑定到我的ViewModel中的属性:
LongListSelector
到目前为止这是有效的。问题是,如果我在ViewModel中更改模板的属性,则 <toolkit:LongListSelector ItemTemplate="{Binding ItemTemplate}" ItemsSource="{Binding Items}" />
不会应用更改的模板。
我查看了调试器,每当我使用它的setter更改属性时,就会依次调用getter,因此LongListSelector
会读取新模板(但不会应用它)。
这是一个错误,还是无法通过绑定更改LongListSelector
?
答案 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();
}
}