2

我写了一个允许重新排序列表框的行为。要正常工作,ListBox 的 ItemsSource 必须是 ObservableCollection<...>,所以我可以调用 Move(from,to) 方法。

我的问题是:如何将 ListBox.ItemsSource 转换为 ObservableCollection。

我已经尝试过:

ObservableCollection<object> test = listBox.ItemsSource as ObservableCollection<object>;

这不起作用,因为 ObservableCollection 不支持协方差。

4

1 回答 1

2

由于您知道要调用的方法ObservableCollection<T>.Move,因此可以使用简单的反射:

var move = listBox.ItemsSource
                  .GetType()
                  .GetMethod("Move");
if (move != null)
{
    move.Invoke(listBox.ItemsSource, new[] { old, new });
}
else
{
    // IList fallback?
}
于 2012-04-27T08:56:36.277 回答