2012-04-27 11 views
2

ListBoxを並べ替えるための動作を記述しました。 ListBoxのItemsSourceを正常に動作させるにはObservableCollection < ...>でなければならないので、Move(from、to)メソッドを呼び出すことができます。WPF ListBox.ItemsSourceをObservableCollection <some dynamic type>にキャストする方法

問題: ListBox.ItemsSourceをObservableCollectionにキャストする方法を教えてください。

私はすでに試した:

動作しません
ObservableCollection<object> test = listBox.ItemsSource as ObservableCollection<object>; 

、のObservableCollectionは共分散をサポートしていないため。あなたは、ObservableCollection<T>.Moveを呼び出すしたいのですが方法を知っているので

+0

は、あなたの質問は 'listBox.ItemsSource'がある*のIList 'の一部*タイプ'しかし、実行時に何が分からないのか? – user7116

+0

リストのタイプは実行時にのみ取得できます。 – JensPfister1

+0

編集:IListの代わりにObservableCollection のリストが必要 JensPfister1

答えて

2

は、あなたが簡単なリフレクションを使用することができます:あなたが知っているので

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

私はIList-Approachをデフォルトで使用していますが、あなたの答えは(汚い)素晴らしいアプローチです! – JensPfister1

関連する問題