【问题标题】:Is there an easy way to reorder items in a ListView有没有一种简单的方法来重新排序 ListView 中的项目
【发布时间】:2014-02-19 01:51:33
【问题描述】:

我有一个绑定到 ObservableCollection 的 ListView 数据。我将 CanReorderItems 属性设置为 true。

但是,当我在列表视图中拖动项目时,它们会停留在原来的位置。

有什么简单的方法可以在列表视图中重新排序?

这是我的代码: 页面的ctor:

public BlankPage()
{
    this.InitializeComponent();
    ObservableCollection<MyClass> c = new ObservableCollection<MyClass>();
    c.Add(new MyClass("a"));
    c.Add(new MyClass("b"));
    c.Add(new MyClass("c"));
    DataContext = c;
}

页面的 XAML:

<ListView ItemsSource="{Binding}" CanDragItems="true" CanReorderItems="true" AllowDrop="True"></ListView>

【问题讨论】:

    标签: xaml windows-runtime winrt-xaml


    【解决方案1】:

    现在 ListView 和 GridView 中有一个bug(注意这个问题是在 Windows 8.0 发布之前提出的),您需要使用 CollectionViewSource:

    public BlankPage()
    {
        this.InitializeComponent();
        ObservableCollection<MyClass> c = new ObservableCollection<MyClass>();
        c.Add(new MyClass("a"));
        c.Add(new MyClass("b"));
        c.Add(new MyClass("c"));
        var viewSource = new CollectionViewSource { Source = c };
    
        DataContext = viewSource.View;
    }
    

    【讨论】:

    • 菲利普,谢谢您的回复。但它不会重新排序项目。还有什么我应该做的吗? (听活动?)
    • 你的物品里有什么?如果您有按钮 - 它们可能不起作用,但您可以用自定义按钮实现替换它们,例如 ListItemButton - winrtxamltoolkit.codeplex.com/SourceControl/changeset/view/…
    • 我没有自定义项目,请参见上面的示例。
    • 嗯,你是对的 - 似乎你可以拖动项目,并且有指示器表明你可以将它们放在新位置,但它们不会留在原地......也许确实如此不能与 ItemsSource 一起使用,或者您需要处理一些事件来重新排列 ItemsSource 集合...您在 MSDN 论坛中问过了吗?那里通常有来自 MSFT 的人可以帮助解决此类问题。
    • 就在那里:social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/… - ListView/GridView 中似乎存在错误,您需要使用 CollectionViewSource 作为 ObservableCollection 的一种代理。
    【解决方案2】:

    您需要打开 AllowDrop 并将您的 ItemsSource 设置为 ObservableCollection 或 ICollectionViewSource。

    【讨论】:

      猜你喜欢
      • 2016-01-29
      • 2010-09-23
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      相关资源
      最近更新 更多