2011-10-19 14 views
-1

WPF:監視可能なコレクションオブジェクトに私がツリービューを持っているツリービュー選択した項目

<TreeView> 
    <TreeView.ItemTemplate> 
    <HierarchicalDataTemplate ItemsSource="{Binding Path=TucActivity}"> 
     <TextBlock> 
     <TextBlock.Text> 
      <MultiBinding StringFormat="{}{0} {1}"> 
      <Binding Path="DisplayedStartTime"></Binding> 
      <Binding Path="Name"></Binding> 
      </MultiBinding> 
     </TextBlock.Text> 
     </TextBlock> 
     <HierarchicalDataTemplate.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Path=Message}" /> 
     </DataTemplate> 
     </HierarchicalDataTemplate.ItemTemplate> 
    </HierarchicalDataTemplate> 
    </TreeView.ItemTemplate> 
</TreeView> 

有界:

MainTreeView.ItemsSource = ((App)Application.Current).TucOC; 

は私がしたいこと((App)Application.Current).TucOCが 選択した項目更新されるたびに(とも焦点)は、観測可能なコレクション内のものになります。

((App)Application.Current).TucOCは がコードの複数の箇所で更新されているため、1か所でやりたいと思います。

最適な方法は何ですか?

+0

この質問は複数回答されています(http://stackoverflow.com/questions/7153813/wpf-mvvm-treeview-selecteditem)またこちら[こちら](http://stackoverflow.com/questions/1000040)/selecteditem-in-a-wpf-treeview) – WiiMaxx

答えて

-6

MVVMのような開発パターンを使用している場合は、ObservableCollectionに保持されているタイプのViewModelクラスに、ツリービューソースの現在選択されているアイテムを保持するプロパティを作成します。あなたは双方向のモード値を指定するのSelectedItemバインディングに

<TreeView ItemsSource="{Binding TucOC, Mode=OneWay}" SelectedItem="{Binding SelectedTuc, Mode=TwoWay}">...</TreeView> 

お知らせ - :

private object _selectedTuc; 
public object SelectedTuc 
{ 
    get 
    { 
     return _selectedTuc; 
    } 
    set 
    { 
     _selectedTuc = value; 
     OnPropertyChanged("SelectedTuc"); 
    } 
} 

次に、あなたのツリービューでは、ツリービューのSelectedItemのこのプロパティをバインドします。それは次のようになりますこれにより、UIからSelectedTucプロパティが更新され、SelectedTucプロパティが変更されるたびにUIが更新されます。

MVVMなどを使用していない場合は、ObservableCollection内の選択したアイテムまたはインデックスが変更されるたびに、TreeViewのSelectedItemを更新するユーティリティメソッドを作成する必要があります。しかし、これは私がそれを行うことをお勧めする方法ではありません。

+2

このエラーを回避する方法: 'SelectedItem'プロパティは読み取り専用で、マークアップから設定することはできません。 –

関連する問題