WPF如何将ListBox.ItemsSource转换为ObservableCollection <some dynamic =“”type =“”> </some>

时间:2012-04-27 08:28:14

标签: c# behavior covariance

我编写了一个允许重新排序ListBox的行为。为了正常工作,ListBox的ItemsSource必须是一个ObservableCollection&lt; ...&gt;,所以我可以调用Move(from,to)-method。

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

我已经尝试过:

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

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

1 个答案:

答案 0 :(得分:2)

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

var move = listBox.ItemsSource
                  .GetType()
                  .GetMethod("Move");
if (move != null)
{
    move.Invoke(listBox.ItemsSource, new[] { old, new });
}
else
{
    // IList fallback?
}