2011-12-13 131 views
0

我寫了一個WPF活動library.In活動的一個我用一個TreeView,以顯示它像這樣一些信息:綁定樹型視圖

... 
<TreeView x:Name= "myTreeView" Grid.Row="0" FontFamily="Tahoma" FontSize="10"> 
       <TreeViewItem Header="Item 1"> 
        <TreeViewItem Header="Item 11" > 
         <TreeViewItem Header="Item 111"/> 
         <TreeViewItem Header="Item 112" /> 
        </TreeViewItem> 
        <TreeViewItem Header="Item 12" > 
         <TreeViewItem Header="Item 121" /> 
         <TreeViewItem Header="Item 122" /> 
         <TreeViewItem Header="Item 123" /> 
        </TreeViewItem> 
        <TreeViewItem Header="Item 13" > 
         <TreeViewItem Header="Item 131" /> 
         <TreeViewItem Header="Item 132" /> 
        </TreeViewItem> 
       </TreeViewItem> 
      </TreeView> 
... 

和我的代碼活動端屬性是這樣的:

public InArgument<TreeViewItem> Branch { 
     get{return _branch;} 
     set 
     { 
      if (this._branch != value) 
      { 
       this._branch = value; 
       OnPropertyChanged("Branch"); 
      } 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void OnPropertyChanged(string propertyName) 
    { 
     if (this.PropertyChanged != null) 
     { 
      this.PropertyChanged(this, 
          new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

當用戶在TreeView的項目之一點擊我需要,我發送物品到我的財產(我想其綁定到分支屬性)。 我該怎麼辦?

回答

0

不幸的是,你想實現的功能並不適用。 這裏有一個解決方案的一些不同的方法: Data binding to SelectedItem in a WPF Treeview

最簡單的辦法是有一些代碼隱藏:

XAML:

<TreeView SelectedItemChanged="myTreeView_SelectedItemChanged" 

代碼背後:

private void myTreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) 
{ 
    var treeViewItem = e.NewValue as TreeViewItem; 
    (myTreeView.DataContext as MyViewModel).Branch = treeViewItem; 
} 
+0

謝謝SvenG,但它不起作用。我像這樣輸入代碼:var si =(this.DataContext as BuySellActivity); si.Branch = treeViewItem;但在運行時,si變量爲空並且不起作用 – Amin

+0

Sry我假設你已經將包含分支屬性的Activity類設置爲datacontext到Tree或窗口。 如果不是在Window的代碼隱藏或XAML標記中這樣做: this.DataContext = YourActivity SvenG