2011-10-19 166 views
-1

我有一個TreeView: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是 更新在代碼中的多個地方。

什麼是最好的選擇呢?

+0

這個問題被多次解答[這裏](http://stackoverflow.com/questions/7153813/wpf-mvvm-treeview-selecteditem)和[這裏](http://stackoverflow.com/questions/1000040/selecteditem-in-a-wpf-treeview) – WiiMaxx

回答

-6

如果您使用像MVVM這樣的開發模式,我會在您的ViewModel類上創建屬於ObservableCollection類型的屬性,以保存當前爲您的treeview源選擇的項目。這將是這個樣子:

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

然後,在你的樹視圖,你這個屬性綁定到TreeView的的SelectedItem:

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

通知您指定雙向的模式價值的SelectedItem的結合 - 這允許您的SelectedTuc屬性從UI進行更新,以及每當SelectedTuc屬性更改時更新UI。

如果你沒有使用MVVM或類似的東西,你將需要創建一個實用程序方法,每次ObservableCollection中的選定項目或索引更改時,該方法都會更新TreeView的SelectedItem。然而,這不是我推薦的做法。

+2

你是如何解決這個錯誤的:'SelectedItem'屬性是隻讀的,不能從標記中設置。 –