2011-08-16 8 views
0

ObservableCollection<T>をでTreeView(またはその他のコントロールについては)にバインドしようとしています。 ValueConverterでは、AsHierarchy拡張子(scip.be)を使用して自己参照(各エンティティにはParentIdフィールドがあります)を階層に変換します。ObservableCollectionにバインドして、ValueConverterを使用しています

前述のように、私はValueConverterを使用しないときにリストの更新がビュー(GUI)に反映されるObservableCollection<T>の内部に私の(平らなリストの)エンティティを格納します。

ValueConverterを追加した場合、アップデートは私のビューにもう反映されません。値コンバータ内にブレークポイントを設定すると、それ以降のすべてのCollectionChangedイベントは無視されます。 ValueConverterの

ソースコード:私は、コンバータをバインド

public class HierarchyValueConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value == null) return null; 
     ObservableCollection<Entity> data = (ObservableCollection<Entity>)value; 
     return data.AsHierarchy(p => p.Id, p => p.ParentId); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

のItemsSource:

ItemsSource="{Binding Data, 
         Source={StaticResource MyDataSource}, 
         Converter={StaticResource HierarchyValueConverter}}" 

この1の今かなりの時間が私を盗聴するので、私は、誰かが答えを提供することを願って。

ありがとうございます!

+0

値コンバータを接続したXAMLを送信してください。 – Paparazzi

答えて

1

階層を観察可能な方法でバインドすることは、ほとんどの場合、1つの拡張方法では解決されません。

CompositeCollectionのような独自のユーティリティクラスを実装することをお勧めしますが、階層設定を目的としていますが、1つのアイテムが追加された場合にツリー全体を再構築すると、これはおそらく簡単な作業ではありませんが、それは私が推薦する一般的な方向です。

+0

ありがとう - 私はそれを恐れていました。 –

+0

あなたを気にして、ごめんなさい。 - チュートリアルについて知っているかもしれませんか?私は正しい軌道には、インターフェイスを実装してカスタムObservableCollectionを作成しているICollection 、INotifyCollectionChanged、INotifyPropertyChanged? –

+0

@Dänu:申し訳ありませんが、私はその点についてチュートリアルは知らないが、ObservableCollectionsを内部的に使用して関連するメソッドを転送することができるものを完全に再実装したくない場合は、私が実際にこの手で私の手を試してみるかもしれない時間があれば... –

0

ObservableCollectionは、何かが変更されたことをitemscontrolに通知するINotifyCollectionChangedインターフェイスを実装します。 AsHierarchyは変更通知を提供しないIEnumerableを返すだけなので、更新が表示されなくなります。

ObservableCollectionのCollectionChangedイベントを購読するのが速くて厄介です。イベントハンドラでは、値コンバータのConvertメソッドが再度実行されるように強制的に再バインドします。

+0

これは少し汚れています;-) –

関連する問題