UWP:DataTemplateSelector和SelectedItem
如何在UWP项目中更改ListView的SelectedItem的DataTemplate ? 我正在尝试使用DataTemplateSelector,但问题是SelectTemplateCore只被调用一次。
这是我尝试过的:
MyTemplateSelector类
public class MyTemplateSelector : DataTemplateSelector { public DataTemplate DefaultTemplate { get; set; } public DataTemplate SelectedItemTemplate { get; set; } protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) { var cont = container as ListViewItem; if (cont != null) { FrameworkElement elemnt = container as FrameworkElement; if (cont.IsSelected) { return SelectedItemTemplate; } else { return DefaultTemplate; } } else return DefaultTemplate; } }
页面的资源
列表显示
一种方法是使用RegisterPropertyChangedCallback
监视IsSelected
属性的更改,然后手动更新ListViewItem
的ContentTemplateSelector
–
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) { if (container is ListViewItem cont) { if (cont.Tag != null && long.TryParse(cont.Tag.ToString(), out var token)) { cont.UnregisterPropertyChangedCallback(ListViewItem.IsSelectedProperty, token); } cont.Tag = cont.RegisterPropertyChangedCallback(ListViewItem.IsSelectedProperty, (s, e) => { cont.ContentTemplateSelector = null; cont.ContentTemplateSelector = this; }); if (cont.IsSelected) { return SelectedItemTemplate; } return DefaultTemplate; } return DefaultTemplate; }