1

我一直在玩 WPF GridView 控件(DesktopUI 不是 Silverlight),我需要能够选择特定的行,并且只返回该行的数据以便在新控件(如列表框)中查看。

此外,一旦选择了一行中的数据,就需要禁用选择或添加其他数据到我的列表框的能力。这里的用例是用户只能选择一个行/记录来导出或发布。

在查看一些 Telerik 示例时,我看到了一些类似的示例,但没有一个完全支持这个用例。

有没有人对这些控件有经验,并知道这是否可以在 WPF gridView 中完成。I haven't had much luck with their documentation and I have tried to use some of the inherit features like the GridViewSelectColumn property (which generates a checkbox in a column but I haven't had any luck invoking commands when a checkbox is selected/checked )。而不是复选框,我应该使用一个按钮并将其添加为用户可以单击的独立列,例如:

如果有人可以提供一个代码示例,说明如何调用一行数据的选择以及如何在选择单行后禁用其他行的选择,我将不胜感激。对于禁用,我假设一旦选择了一个项目,CanUserSelect 属性需要设置为 false,但我还没有成功地使用 GridViewSelectColumn 调用任何东西。

任何样品或参考点将不胜感激。

谢谢

4

1 回答 1

0

我意识到这是一个旧帖子。但我想解决这个问题,希望它能帮助其他人。对于这个项目,我希望能够在网格视图中为特定行选择记录。Telerik GridView 返回 5 列,但集合(从 WCF 服务返回)实际上包含多达 30 列。

我不会在这里只讨论如何设置选择的数据绑定。此外,此示例不遵循模式(例如 MVVM),因此为了快速解释,代码被放置在 xaml 代码隐藏中。

首先,我需要注册 CollectionChangedEvent 处理程序。这样做是每次我在 Grid 视图中选择一行时,它都会根据所选行生成所有项目的内存集合。

this.myGridView.Loaded += (o, e) =>
      {
          this.myGridView.SelectedItems.CollectionChanged += new NotifyCollectionChangedEventHandler(SelectedItem_CollectionChanged);
      };

对于 SelectedItem_Collection Changed 事件

        void Item_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
    {
        if (e.Action == NotifyCollectionChangedAction.Add)
        {
            var index = e.NewItems[0] as myWCFService.Index;
            currentItem = index.Item;
        }
    }

基本上这里发生的情况是当检测到记录选择时来自所选行的项目(包括所有未显示在网格中的项目)这是通过将 index = 设置为我的 web 服务中的 e.NewItems[0] 来完成的,然后将其添加到新的内存中的集合(currentItem)。

注意: currentItem 在主类中声明为:

 public myWCFService.Item currentItem;

完成此操作后,我就可以将所选行中的数据(存储在 currentItem 集合中)传递给其他集合/控件

于 2011-02-21T16:45:08.720 回答