我想要动态更改LongListSelector的ItemTemplate。我通过将它绑定到我的ViewModel中的一个属性来实现:
<toolkit:LongListSelector ItemTemplate="{Binding ItemTemplate}" ItemsSource="{Binding Items}" />到目前为止,这是可行的。问题是,如果我在ViewModel中更改了模板的属性,则LongListSelector不会应用更改后的模板。
我查看了调试器,每当我使用setter更改属性时,就会依次调用getter,这样LongListSelector就会读取新模板(但不会应用它)。
这是一个错误,还是不可能通过绑定来更改ItemTemplate?
发布于 2011-08-17 08:09:53
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();
}
}https://stackoverflow.com/questions/7085781
复制相似问题