2

我们需要以GridView增量方式显示图像。因此,要在 中找到选中的项目GridView,项目的IsSelected属性GridView已与对应的绑定对象属性CLR objectGridView'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);
        }

} 

但似乎上述方法存在缺陷。每当向下滚动页面以加载下一组照片时,先前选择的项目就会失去选择。

有没有人遇到过这个问题或有任何解决上述问题的建议?

4

1 回答 1

0

移动IsSelected到模型类并将其绑定到用户控件。用户控件实际上是单元格,将放在您的数据模板中。

<GridView.ItemTemplate>
    <DataTemplate>
        <controls:MyCustomControl IsSelected="{Binding IsSelected}"/>
    </DataTemplate>
</GridView.ItemTemplate>

MyCustomControl中,您将处理不同的视觉状态以显示项目的选定状态。这样,当您只需要从模型列表中获取所选项目的列表时,您的 ViewModel 根本不必“知道”列表。

于 2016-04-11T12:38:55.587 回答