Hi,
I am working with the 'XamDataTree 2010 vol 3', as infragistics previous version lacks a TreeView control I am trying to migrate from my previous standard TreeView to Infragistics XamDataTree (main reason is theming and styling), for my surprise infragistics treeview follows a diferent path than the standard one. Not similar to the Silverlight XamTree which follows a much more common approach compared to the standard treeview.
However, everything resumes to find out how to put all the functionalities together again. My code so far can bind to a collection, display hierarchical information and bind to an 'IsExpanded' property on my view model.
<ig:XamDataTree ItemsSource="{Binding Catalogs}" Grid.Row="1">
<ig:XamDataTree.GlobalNodeLayouts>
<ig:NodeLayout Key="itemLayout" TargetTypeName="TreeViewItemViewModel" IsExpandedMemberPath="IsExpanded">
<ig:NodeLayout.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Width="16" Height="16" Margin="3,0" Source="{Binding Data.ImagePath}" />
<TextBlock Text="{Binding Data.Name}" />
</StackPanel>
</DataTemplate>
</ig:NodeLayout.ItemTemplate>
</ig:NodeLayout>
</ig:XamDataTree.GlobalNodeLayouts>
</ig:XamDataTree>
Right now, I am looking forward to bind the XamDataTreeNode item to an IsSelected property on my view model, but I cannot figure out how to target the XamDataTreeNode item.
Any help would be appreciated,
Regards,
Pablo
PS: Sorry about the code snippet formatting.
I just want to let wmlanza know that this solution worked out perfectly for my needs. Thanks for sharing!
If I change SelectedNode myself in the viewmodel to an other TreeNode the selection is not changed.
Is this the default behavior or I'm wrong.
Thanks
Forget it. I figured it out :
My View Model was wrong. The property should have been of Type XamDataTreeNode instead of the class for the Data of the Node
Hi. I created a class that inherits XamDataTree with a dependency property for the SelectedNode. I overrode the OnActiveNodeChanged event and set the new property. However my view model is not seeing the change. I am wondering if I am missing something. Any help would be appreciated.
Here is the XamTree class
Public Class XamDataTreeExtended Inherits XamDataTree Public Shared ReadOnly SelectedNodeProperty As DependencyProperty = DependencyProperty.Register("SelectedNode", GetType(XamDataTreeNode), GetType(XamDataTreeExtended), New PropertyMetadata(AddressOf SelectedNodeChanged)) Public Property SelectedNode() As XamDataTreeNode Get Return CType(GetValue(SelectedNodeProperty), XamDataTreeNode) End Get Set(ByVal value As XamDataTreeNode) SetValue(SelectedNodeProperty, value) End Set End Property Private Shared Sub SelectedNodeChanged(ByVal s As DependencyObject, ByVal args As DependencyPropertyChangedEventArgs) 'do nothing Dim tree = DirectCast(s, XamDataTreeExtended) tree.OnPropertyChanged("SelectedNode") End Sub Protected Overrides Sub OnActiveNodeChanged(args As Infragistics.Controls.Menus.ActiveNodeChangedEventArgs) SelectedNode = Me.ActiveNode MyBase.OnActiveNodeChanged(args) End Sub End Class
Here is some of the Xaml for the tree:
<infra:XamDataTreeExtended x:Name="xamTree" AllowDrop="True" IsDropTarget="True" Grid.Row="0" ItemsSource="{Binding RootFolderContactsNode.SubItemsSorted}" MaxHeight="550" NodeDragDrop="xamTree_NodeDragDrop" Background="Transparent" NodeLineVisibility="Visible" SelectedNode="{Binding SelectedNode, Mode=TwoWay}">
...
</infra:XamDataTreeExtended>
In my view model:
Private _selectedNode As FolderContactTreeNode Public Property SelectedNode As FolderContactTreeNode Get Return _selectedNode End Get Set(value As FolderContactTreeNode) _selectedNode = value '<----Not being Hit OnPropertyChanged("SelectedNode") End Set End Property
Thank you Stoimen!
I appreciate the quick response. That was just the piece of duct tape I needed to get it all working!
Hopefully this post can help others out there accomplish a similar thing until you build something into your control to handle it cleanly.
Thank you again.