Click here to Skip to main content
15,885,546 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I am using WPF, C#, Linq to Sql -- I have a stored procedure and I am trying to bind the results to a treeview two levels deep. Below is some of the code I thought might help understand better, I am not sure if I needed to post this much code, but I can remove the uneeded code. I am having trouble figuring out the bindings with the data-templates. Any suggestions or comments would be appreciated.

Here is part of the view model I am using


C#
        public sealed class AViewModel : ViewModel
        {

          public sealed class ItemsToGet
          {
             public Guid? Id {get; set; }
             public int? TNumber { get; set;}
             public string Title { get; set; }
             public string Description { get; set; }
             public string FullName { get; set;}
          }

          //this is the parameter I am passing to the procedure
          private Guid mText = Guid.Empty;
          private ObservableCollection<ItemsToGet> mHistory = new ObservableCollection<ItemsToGet>();

          public ObservableCollection<ItemsToGet> History
          {
          get
            {
               return mHistory;
            }
          }

           public Guid SearchText
           {
                get
                {
                    return mText ;
                }
                set
                {
                    mText = value;
                    OnPropertyChanged("SearchText");
                }
           }

    //This Guid is just for testing the Procedure and binding etc.
    //mText = new Guid("579BC2EF-6681-4728-8CC5-9671C1D54A35");

             var itemlist = from s in context.GetHistory(mText)                                           
                                           select new ItemsToGet()
                                           {
                                               Id = s.Id,                                                  
                                               TNumber = s.TNumber,
                                               Title = s.Title,
                                               Description = s.Description,
                                               FullName = s.FullName
                                            };

List<ItemsToGet> Results = itemlist.ToList();
mHistory.Clear();
Results.ForEach(b => mHistory.Add(b));



Here is the View Code Behind

C#
public partial class AView : UserControl
    {
        public AView()
        {
            InitializeComponent();
            AViewModel vm = this.DataContext as AViewModel;

        }
    }



Xaml -- I want to top level to display the Title, and the child(second level to be the TNumber)

XML
<TreeView ItemsSource="{Binding History}">

    <!--  template -->
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding History}">
                <TextBlock Foreground="Red" Text="{Binding Title}" />

            <!--  template -->
            <HierarchicalDataTemplate.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding History}">
                        <TextBlock Text="{Binding TNumber}" />

                    <!--  template -->
                    <HierarchicalDataTemplate.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding}" />
                        </DataTemplate>
                    </HierarchicalDataTemplate.ItemTemplate>

                </HierarchicalDataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>

        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>

</TreeView>

</UserControl>



Here is a snapshot of what the results look like, there are more rows than this, but this is the format.


C#
//                 Id               TNumber    Title    Description    FullName
//D5C507FB-92FC-4179-BAB9-110928736428  1   Design 1    Random         John Doe
//D5C507FB-92FC-4179-BAB9-110928736428  2   Design 1    Another        John Two
//E00FE69C-BF14-4261-BEA6-2F4167BCB4F5  1   Design 2    Random Two     Jane Doe
//E00FE69C-BF14-4261-BEA6-2F4167BCB4F5  2   Design 2    Another Random Jane Two
//E00FE69C-BF14-4261-BEA6-2F4167BCB4F5  3   Design 2    Third Random   Jane Three
//D34CC0DD-F67B-48D6-B0A6-D91F5A4B27E2  1   Design 3    Another Random John Does
//06468A50-CC07-4CEC-B2EC-1817B29DC783  1   Design 4    Full Random    John Jane
//06468A50-CC07-4CEC-B2EC-1817B29DC783  2   Design 4    Full text                 Jane John


Trying to display it like below. Thanks for any comments or suggestions.

C#
Design 1
      --Tnumber 1
      --TNumber 2
Design 2
      --TNumber 1
      --TNumber 2
      --TNumber 3
Design 3
      --TNumber 1
ETC
ETC
Posted

1 solution

If I've understood your question correctly, you need to create a DataTemplateSelector[^], have a look at DBTool for Oracle - Part 1[^] for a rather complete example on how to work with HierarchicalDataTemplate and DataTemplateSelector.

You'll find two implementations of DataTemplateSelector in the Harlinn.Oracle.DBTool\Types folder.

Best regards
Espen Harlinn
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900