Hey,
I would like to implement Infragistic's XamDataTree but I'm having a problem with binding a NodeLayout to a dictionary.
One of my Items in the Hierarchy holds a property of a dictionary, which I'd like to bind the DataTree's Node Layout too. Actually, to be more specific, I only need to bind the NodeLayout to the dictionary's values list.
However, when I try doing that with this markup
<Infragistics:NodeLayout Key="Fields" TargetTypeName="FieldMetaData" DisplayMemberPath="Values.FieldName"/>
I get this error in my debug output when trying to expand its parent node, to see this exact node layout -
"Unable to cast object of type 'System.Collection.Generic.KeyValuePair`2[FieldMetaData]' to type 'System.String'.
I tried many other tricks and variation that unfortunately didn't work. Also, apparently TargetTypeName does nothing in this case since I guess it doesn't recognize the values as "FieldMetaData" type, so only "Keys" actually works.
So I wonder if XamDataTree even supports dictionaries, or if there's anyway to make it work because all I actually need is to bind to the list of Dictionary values.
In Microsoft's regular TreeView It worked, so it will be a bit disappointing if I couldn't make this work with XamDataTree.
Thanks!
Dror.
Hi,
This sample for dictionary binding to xamDataTree is not available anymore , can you please attach any sample code or file for same .
Thank you in advance
Regards
Nkaur
Hi jlmehta,
I have reviewed your code and after further investigation it turned out that if you inherit Dictionary<String, String> in another class, for example InheritedDictionary and use that class and place it in the TargetTypeName it would show the keys or the values of the Dictionary according to the DisplayMemeberPath that you want to see. The other thing is that the Key for the NodeLayout that is going to display the nodes from the dictionary should be equal to the name of the property of that dictionary. I hope that helps you!
To the second question, i don't think it is possible to not have nodes that are not visible, because they don't have children, but i need to double check that and confirm that later.
Regards,
Nikola.
Any suggestions on this?
Thanks..
Thanks for your example Nikola, but I'm afraid thats not what I'm looking for exactly. Here's roughtly the structure of a tree I want.
Object A has a list of Object B.
Object B has a list of Object C.
Object C has a Dictionary<String, String>
I bind the tree to A.List<B> (List of B is Object A)
I want the tree to look something like this
B1---C11---C12------Dictionary key1------Dictionary key1---C13------Dictionary key1B2---C21------Dictionary key1------Dictionary key1---C22
The code I ahve right now is
<ig:XamDataTree ItemsSource="{Binding InnerReport.ReportColumns}"> <ig:XamDataTree.GlobalNodeLayouts> <ig:NodeLayout Key="ColLayout" TargetTypeName="ReportColumn" DisplayMemberPath="DisplayName"/> <ig:NodeLayout Key="DrlDnLayout" TargetTypeName="ReportDrillDown" DisplayMemberPath="ContextMenulabel"> <ig:NodeLayout.CheckBoxSettings> <ig:CheckBoxSettingsOverride CheckBoxVisibility="Visible" /> </ig:NodeLayout.CheckBoxSettings> </ig:NodeLayout> <ig:NodeLayout Key="MapLayout" TargetTypeName="Dictionary<string,string>" DisplayMemberPath="Key"/> </ig:XamDataTree.GlobalNodeLayouts> </ig:XamDataTree>
Also on a related topic, is it possible for the tree to not show Nodes which have no children? So in the Above example, the tree would not show ReportColumn if its List<ReportDrilldown> is empty.Thanks
I am attaching the sample from the bug that was fixed last year. You can observe the code and see how to use the Dictionary as ItemsSource for XamDataTree. If you have any questions, please feel free to ask!