我们要求以GridView
递增显示图像。因此,要查找GridView
中的所选项,IsSelected
项的GridView
属性已与CLR object
的相应绑定对象属性绑定(GridView's ItemSource
类型的属性)。由于UWP
不支持RelativeSouce
和setter绑定,所以在互联网上搜索后我们找到了以下代码。
public class GridViewEx : GridView
{
protected override void PrepareContainerForItemOverride(Windows.UI.Xaml.DependencyObject element, object item)
{
base.PrepareContainerForItemOverride(element, item);
var gridItem = element as GridViewItem;
var binding = new Binding { Mode = BindingMode.TwoWay, Source = item, Path = new PropertyPath("IsSelected") };
gridItem.SetBinding(SelectorItem.IsSelectedProperty, binding);
}
}
但似乎上述方法存在缺陷。每当向下滚动页面以加载下一组照片时,之前选择的项目都将丢失其选择。
以前是否有人遇到此问题或有任何解决上述问题的建议?
答案 0 :(得分:0)
将IsSelected
移动到模型类并将其绑定到用户控件。用户控件实际上是单元格,将放在您的数据模板中。
<GridView.ItemTemplate>
<DataTemplate>
<controls:MyCustomControl IsSelected="{Binding IsSelected}"/>
</DataTemplate>
</GridView.ItemTemplate>
在MyCustomControl
中,您将处理差异视觉状态以显示项目的选定状态。这样,当您需要从模型列表中获取所选项目的列表时,ViewModel根本不必“知道”列表。