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