2009-08-06 66 views
1

有誰知道我如何從TreeView中獲取SelectedItem(不是標題)?
這裏是我的代碼:從TreeView獲取SelectedItem?

<TreeView Name="treeView1" DataContext="{Binding Path=PresentationsViewModel}" Grid.Column="1" > 
    <TreeViewItem IsExpanded="True" Header="Objects-A-List" DisplayMemberPath="Name" ItemsSource="{Binding Path=MyItem.ListA}"></TreeViewItem> 
    <TreeViewItem IsExpanded="True" Header="Objects-B-List" DisplayMemberPath="Name" ItemsSource="{Binding Path=MyItem.ListB}"></TreeViewItem> 
    <TreeViewItem IsExpanded="True" Header="Objects-C-List" DisplayMemberPath="Name" ItemsSource="{Binding Path=MyItem.ListC}"></TreeViewItem> 
</TreeView> 

注意,有3個不同的列表,包含3個不同的對象類型。 它會幫助我很多有類似:

public Object SelectedObject 
{ 
    set { _selectedObject = value; RunMyMethod(); RaisePropertyChanged("SelectedObject"); } 
} 

提前感謝!

乾杯

+0

你到底想幹什麼?爲什麼TreeView.SelectedItem不適合你? – Andy 2009-08-06 11:45:44

回答

3

好吧,我知道這是一個老問題,可能已經死了,但正如查理所說的那樣。這也可以在代碼中使用。你可以做例如:

<ContentPresenter Content="{Binding ElementName=treeView1, Path=SelectedItem}" /> 

什麼都會顯示選定的項目。您可以爲其添加樣式或DataTemplate,或者使用默認的DataTemplate指向要顯示的對象。

+0

您的視圖模型如何獲取此信息?我得到ContentPresenter擁有所選項目,但我們如何將其轉換爲視圖模型? – 2012-02-04 04:05:04

+0

@ Bob我想你可以將TreeView中的SelectedItem綁定到viewModel中的一個屬性。然後,您還可以將此屬性綁定到contentPresenter或您想要表示它的任何其他表單。確保它具有INotify。因此,當您更改SelectedItem時,ViewModel和視圖中的表示(如果您不想要)都應該更新。 – 2012-02-08 14:12:43

+0

但是,首先問題是,樹視圖上的SelectedItem是隻讀的,不能在XAML中使用。沒有? – 2012-02-08 16:50:21

0

也許我誤解你的問題,但是,

treeView1.SelectedItem 

應該工作。

+1

我想通過 不幸的TreeView沒有這個(但ListView的例子確實有一個) – 2009-08-07 09:23:03

+0

它的作品,男人! Hahahahaa – 2016-10-27 14:47:58

4

步驟1 安裝的NuGet:Install-Package System.Windows.Interactivity.WPF

步驟2 在自己的窗口標籤中添加:xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

步驟3 在樹形視圖中添加:

<TreeView Name="treeView1" ... > 
     <i:Interaction.Triggers> 
       <i:EventTrigger EventName="SelectedItemChanged"> 
        <i:InvokeCommandAction Command="{Binding SelectedItemChangedCommand}" CommandParameter="{Binding ElementName=treeView1, Path=SelectedItem}"/> 
       </i:EventTrigger> 
      </i:Interaction.Triggers> 
    ... 
    </TreeView> 

步驟4 在您的視圖模型添加:

 private ICommand _selectedItemChangedCommand; 
     public ICommand SelectedItemChangedCommand 
     { 
      get 
      { 
       if (_selectedItemChangedCommand == null) 
        _selectedItemChangedCommand = new RelayCommand(args => SelectedItemChanged(args)); 
       return _selectedItemChangedCommand; 
      } 
     } 

     private void SelectedItemChanged(object args) 
     { 
      //Cast your object 
     } 
+0

謝謝你的解決方案:) – Pentarex 2016-05-11 09:11:46