2011-06-27 4 views
0

私はオブザーバブルコレクションを保持しているオブジェクトを持っています これをすべてツリービューに貼り付ける方法を頭に入れようとしています。 したがって、メインオブジェクトは親になり、観察可能なコレクション内のアイテムはサブツリーになります。 現在、クラスにはヘッダにバインドできるpublic stringプロパティがあります。事前にクラスをWPFツリービューにバインドする

public class ServerObject : INotifyPropertyChanged 
{ 
    private string _serverName; 
    ObservableCollection<string> _instanceList; 

    public ObservableCollection<string> InstanceList 
    { 
     get { return _instanceList; } 
    } 

    public string ServerName 
    { 
     get { return _serverName; } 
     set 
     { 
      _serverName = value; 
      RaisePropertyChanged("ServerName"); 
     } 
    } 

    public ServerObject(string name, string version) 
    { 

     ServerName = name; 
     _instanceList = new ObservableCollection<string>(); 
    } 
} 

ありがとう:ここ は、クラスの一部です。

答えて

1

最も簡単な方法はHierarchicalDataTemplatesです。 2つ以上のテンプレートを定義します。テンプレート宣言行に、オブジェクトのタイプインジケータを追加します。また、次のレベルを指すItemsSource属性を追加します。

<HierarchicalDataTemplate Datatype="{x:Type local:mySerberObject}" ItemsSource="{Binding InstanceList}"/> 

トップレベルのコレクションをツリービューにバインドすると、オフにして実行する必要があります。あなたの好みに合うようにデータのスタイルを設定します。

現在MVVMを使用している場合(またはMVVMを使用する予定の場合)、下のリンクを参照して、using the treeview with MVVMについての本当に良い記事をご覧ください。

+0

トップレベルにバインドしなければならなかったことはわかりませんでしたが、これは私が間違っていたことを説明しています。私は役人リストに拘束されていた。おかげ – totallhellfail

+0

私はサーバをリストアップして拡張しますが、内部の項目はテキストが欠けているようです。私はいくつかの明白なステップを欠いていますか? – totallhellfail

+0

私はtreeviewsを使って作業しているときに、手元のアイテムと子アイテムの両方を含むVMを使用するのが最も簡単であることが分かりました。たとえば、ShipViewViewModelにはShipmentViewModelsのコレクションが含まれています。各ShipmentViewModelには、Shipment、PackageViewModelsのコレクション、およびNoteViewModelsのコレクションが含まれています。私はTreeViewにShipmentsViewModel(私は実際には、一般的にCollectionViewSourceを使用してフィルタリングやその他のものを制御する)をバインドし、バインドされた文字列値だけを使用したい階層にテンプレートを定義します。それから私はスタイル。 – CodeWarrior

関連する問題