在UWP App中的GridViewItem IsSelected绑定

时间:2016-04-11 11:11:18

标签: c# gridview win-universal-app uwp-xaml

我们要求以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);
        }

} 

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

以前是否有人遇到此问题或有任何解决上述问题的建议?

1 个答案:

答案 0 :(得分:0)

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

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

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