我编写了一个允许重新排序ListBox的行为。为了正常工作,ListBox的ItemsSource必须是一个ObservableCollection< ...>,所以我可以调用Move(from,to)-method。
我的问题是: 如何将ListBox.ItemsSource转换为ObservableCollection。
我已经尝试过:
ObservableCollection<object> test = listBox.ItemsSource as ObservableCollection<object>;
不起作用,因为ObservableCollection不支持协方差。
答案 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?
}