0

I've written a WPF activity library.In one of activities I used a TreeView to show some information in it like this :

...
<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>
...

And my property in Code-Activity side is like this :

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));
        }
    }

I need when user clicked on one of the TreeView items, I send that item to my property(I want to bind it to Branch property). How can I do it?

SvenG
  • 5,155
  • 2
  • 27
  • 36
Amin
  • 130
  • 2
  • 13

1 Answers1

0

What you want to achieve doesn't work out of the box unfortunately. Here are some different approaches for a solution: Data binding to SelectedItem in a WPF Treeview

Easiest would be to have some CodeBehind:

XAML:

<TreeView SelectedItemChanged="myTreeView_SelectedItemChanged" 

Code Behind:

private void myTreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
  var treeViewItem = e.NewValue as TreeViewItem;
  (myTreeView.DataContext as MyViewModel).Branch = treeViewItem;
}
Community
  • 1
  • 1
SvenG
  • 5,155
  • 2
  • 27
  • 36
  • Thanks SvenG, but it doesn't work. I entered that code like this: var si = (this.DataContext as BuySellActivity); si.Branch = treeViewItem; but in running time, si variable is null and doesn't work – Amin Dec 13 '11 at 13:20
  • Sry i assumed you have already set your Activity class containing the branch property as a datacontext to the Tree or the window. If not do so in code-behind of Window or in the XAML markup: this.DataContext = YourActivity – SvenG Dec 13 '11 at 13:48