This question is locked. New answers and comments are not allowed.
i have prepared an example. I have a radTreeView with hierarchicaldatatemplating. I want to set the selected item when i click on the button. This works when i have collapsed all the treenodes manually. But when the nodes are collapsed it doesn't work. Can somebody explain this behaviour?
<
UserControl
x:Class
=
"TestTreeView.MainPage"
xmlns:d
=
"http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc
=
"http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable
=
"d"
xmlns:local
=
"clr-namespace:TestTreeView"
d:DesignWidth
=
"640"
d:DesignHeight
=
"480"
xmlns:telerik
=
"http://schemas.telerik.com/2008/xaml/presentation"
>
<
UserControl.Resources
>
<
local:CheckStateConverter
x:Key
=
"CheckStateConverter"
/>
<!--Bindings collection for the RadTreeViewItems-->
<
telerik:ContainerBindingCollection
x:Name
=
"BindingsCollection"
>
<
telerik:ContainerBinding
PropertyName
=
"CheckState"
Binding
=
"{Binding IsSelected, Mode=TwoWay, Converter={StaticResource CheckStateConverter}}"
/>
<
telerik:ContainerBinding
PropertyName
=
"IsExpanded"
Binding
=
"{Binding IsExpanded, Mode=TwoWay}"
/>
</
telerik:ContainerBindingCollection
>
<
DataTemplate
x:Key
=
"tBill"
telerik:ContainerBinding.ContainerBindings
=
"{StaticResource BindingsCollection}"
>
<
StackPanel
Orientation
=
"Horizontal"
>
<
TextBlock
Text
=
"{Binding Name}"
/>
</
StackPanel
>
</
DataTemplate
>
<
telerik:HierarchicalDataTemplate
x:Key
=
"tTopLevel"
ItemsSource
=
"{Binding Childs}"
telerik:ContainerBinding.ContainerBindings
=
"{StaticResource BindingsCollection}"
>
<
StackPanel
Orientation
=
"Horizontal"
>
<
TextBlock
Text
=
"{Binding Name}"
/>
</
StackPanel
>
</
telerik:HierarchicalDataTemplate
>
<
telerik:HierarchicalDataTemplate
x:Key
=
"tLevel1"
ItemsSource
=
"{Binding Childs}"
telerik:ContainerBinding.ContainerBindings
=
"{StaticResource BindingsCollection}"
>
<
StackPanel
Orientation
=
"Horizontal"
>
<
TextBlock
Text
=
"{Binding Name}"
/>
</
StackPanel
>
</
telerik:HierarchicalDataTemplate
>
<
telerik:HierarchicalDataTemplate
x:Key
=
"tLevel2"
ItemsSource
=
"{Binding Childs}"
telerik:ContainerBinding.ContainerBindings
=
"{StaticResource BindingsCollection}"
>
<
StackPanel
Orientation
=
"Horizontal"
>
<
TextBlock
Text
=
"{Binding Name}"
/>
</
StackPanel
>
</
telerik:HierarchicalDataTemplate
>
<
telerik:HierarchicalDataTemplate
x:Key
=
"tLevel3"
ItemsSource
=
"{Binding Childs}"
telerik:ContainerBinding.ContainerBindings
=
"{StaticResource BindingsCollection}"
>
<
StackPanel
Orientation
=
"Horizontal"
>
<
TextBlock
Text
=
"{Binding Name}"
/>
</
StackPanel
>
</
telerik:HierarchicalDataTemplate
>
<
telerik:HierarchicalDataTemplate
x:Key
=
"tLevel4"
ItemsSource
=
"{Binding Childs}"
telerik:ContainerBinding.ContainerBindings
=
"{StaticResource BindingsCollection}"
>
<
StackPanel
Orientation
=
"Horizontal"
>
<
TextBlock
Text
=
"{Binding Name}"
/>
</
StackPanel
>
</
telerik:HierarchicalDataTemplate
>
<
telerik:HierarchicalDataTemplate
x:Key
=
"tLevel5"
ItemsSource
=
"{Binding Childs}"
telerik:ContainerBinding.ContainerBindings
=
"{StaticResource BindingsCollection}"
>
<
StackPanel
Orientation
=
"Horizontal"
>
<
TextBlock
Text
=
"{Binding Name}"
/>
</
StackPanel
>
</
telerik:HierarchicalDataTemplate
>
<
telerik:HierarchicalDataTemplate
x:Key
=
"tLevel6"
ItemsSource
=
"{Binding Childs}"
telerik:ContainerBinding.ContainerBindings
=
"{StaticResource BindingsCollection}"
>
<
StackPanel
Orientation
=
"Horizontal"
>
<
TextBlock
Text
=
"{Binding Name}"
/>
</
StackPanel
>
</
telerik:HierarchicalDataTemplate
>
<
telerik:HierarchicalDataTemplate
x:Key
=
"tContract"
ItemsSource
=
"{Binding Childs}"
telerik:ContainerBinding.ContainerBindings
=
"{StaticResource BindingsCollection}"
>
<
StackPanel
Orientation
=
"Horizontal"
>
<
TextBlock
Text
=
"{Binding Name}"
/>
</
StackPanel
>
</
telerik:HierarchicalDataTemplate
>
<
local:AccountTemplateSelector
x:Key
=
"myDataTemplateSelector"
TopLevelTemplate
=
"{StaticResource tTopLevel}"
AccountLevel1Template
=
"{StaticResource tLevel1}"
AccountLevel2Template
=
"{StaticResource tLevel2}"
AccountLevel3Template
=
"{StaticResource tLevel3}"
AccountLevel4Template
=
"{StaticResource tLevel4}"
AccountLevel5Template
=
"{StaticResource tLevel5}"
AccountLevel6Template
=
"{StaticResource tLevel6}"
ContractTemplate
=
"{StaticResource tContract}"
BillTemplate
=
"{StaticResource tBill}"
/>
</
UserControl.Resources
>
<
Grid
x:Name
=
"LayoutRoot"
>
<
Grid.RowDefinitions
>
<
RowDefinition
Height
=
"432*"
/>
<
RowDefinition
Height
=
"48*"
/>
</
Grid.RowDefinitions
>
<
telerik:RadTreeView
Name
=
"radTreeView1"
Margin
=
"5"
IsLineEnabled
=
"True"
SelectionMode
=
"Single"
IsEditable
=
"False"
IsDragDropEnabled
=
"False"
ItemTemplateSelector
=
"{StaticResource myDataTemplateSelector}"
>
</
telerik:RadTreeView
>
<
Button
Content
=
"Button"
Grid.Row
=
"1"
Height
=
"23"
HorizontalAlignment
=
"Left"
Margin
=
"39,13,0,0"
Name
=
"button1"
VerticalAlignment
=
"Top"
Width
=
"75"
Click
=
"button1_Click"
/>
</
Grid
>
</
UserControl
>
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Net;
using
System.Windows;
using
System.Windows.Controls;
using
System.Windows.Documents;
using
System.Windows.Input;
using
System.Windows.Media;
using
System.Windows.Media.Animation;
using
System.Windows.Shapes;
using
Telerik.Windows.Controls;
using
System.ComponentModel;
using
System.Windows.Automation;
using
System.Windows.Data;
namespace
TestTreeView
{
public
partial
class
MainPage : UserControl
{
TreeAccountLevel5 level5a;
public
MainPage()
{
InitializeComponent();
TreeTopLevel top =
new
TreeTopLevel();
top.Id = 1;
top.Name =
"Top"
;
top.Childs =
new
List<TreeAccountLevel1>();
TreeAccountLevel1 level1a =
new
TreeAccountLevel1();
level1a.Id = 1 ;
level1a.Name =
"level1 - A"
;
level1a.ParentId = 1;
level1a.Childs =
new
List<TreeAccountLevel2>();
TreeAccountLevel1 level1b =
new
TreeAccountLevel1();
level1b.Id = 2;
level1b.Name =
"level1 - B"
;
level1b.ParentId = 1;
level1b.Childs =
new
List<TreeAccountLevel2>();
TreeAccountLevel2 level2a =
new
TreeAccountLevel2();
level2a.Id = 1;
level2a.Name =
"level2 - A"
;
level2a.ParentId = 1;
level2a.Childs =
new
List<TreeAccountLevel3>();
TreeAccountLevel2 level2b =
new
TreeAccountLevel2();
level2b.Id = 2;
level2b.Name =
"level2 - B"
;
level2b.ParentId = 1;
level2b.Childs =
new
List<TreeAccountLevel3>();
TreeAccountLevel3 level3a =
new
TreeAccountLevel3();
level3a.Id = 1;
level3a.Name =
"level3 - A"
;
level3a.ParentId = 1;
level3a.Childs =
new
List<TreeAccountLevel4>();
TreeAccountLevel3 level3b =
new
TreeAccountLevel3();
level3b.Id = 2;
level3b.Name =
"level3 - B"
;
level3b.ParentId = 1;
level3b.Childs =
new
List<TreeAccountLevel4>();
TreeAccountLevel4 level4a =
new
TreeAccountLevel4();
level4a.Id = 1;
level4a.Name =
"level4 - A"
;
level4a.ParentId = 1;
level4a.Childs =
new
List<TreeAccountLevel5>();
TreeAccountLevel4 level4b =
new
TreeAccountLevel4();
level4b.Id = 2;
level4b.Name =
"level4 - B"
;
level4b.ParentId = 1;
level4b.Childs =
new
List<TreeAccountLevel5>();
level5a =
new
TreeAccountLevel5();
level5a.Id = 1;
level5a.Name =
"level5 - A"
;
level5a.ParentId = 1;
level5a.Childs =
new
List<TreeAccountLevel6>();
TreeAccountLevel5 level5b =
new
TreeAccountLevel5();
level5b.Id = 2;
level5b.Name =
"level5 - B"
;
level5b.ParentId = 1;
level5b.Childs =
new
List<TreeAccountLevel6>();
radTreeView1.Items.Add(top);
top.Childs.Add(level1a);
top.Childs.Add(level1b);
level1a.Childs.Add(level2a);
level1a.Childs.Add(level2b);
level2a.Childs.Add(level3a);
level2a.Childs.Add(level3b);
level3a.Childs.Add(level4a);
level3a.Childs.Add(level4b);
level4a.Childs.Add(level5a);
level4a.Childs.Add(level5b);
}
private
void
button1_Click(
object
sender, RoutedEventArgs e)
{
radTreeView1.SelectedItem = level5a;
}
}
public
class
AccountTemplateSelector : DataTemplateSelector
{
public
AccountTemplateSelector()
{
}
public
Telerik.Windows.Controls.HierarchicalDataTemplate TopLevelTemplate
{
get
;
set
;
}
public
Telerik.Windows.Controls.HierarchicalDataTemplate AccountLevel1Template
{
get
;
set
;
}
public
Telerik.Windows.Controls.HierarchicalDataTemplate AccountLevel2Template
{
get
;
set
;
}
public
Telerik.Windows.Controls.HierarchicalDataTemplate AccountLevel3Template
{
get
;
set
;
}
public
Telerik.Windows.Controls.HierarchicalDataTemplate AccountLevel4Template
{
get
;
set
;
}
public
Telerik.Windows.Controls.HierarchicalDataTemplate AccountLevel5Template
{
get
;
set
;
}
public
Telerik.Windows.Controls.HierarchicalDataTemplate AccountLevel6Template
{
get
;
set
;
}
public
Telerik.Windows.Controls.HierarchicalDataTemplate ContractTemplate
{
get
;
set
;
}
public
DataTemplate BillTemplate
{
get
;
set
;
}
public
override
DataTemplate SelectTemplate(
object
item, DependencyObject container)
{
base
.SelectTemplate(item, container);
if
(item
is
TreeAccountLevel1)
{
return
this
.AccountLevel1Template;
}
else
if
(item
is
TreeTopLevel)
{
return
this
.TopLevelTemplate;
}
else
if
(item
is
TreeAccountLevel2)
{
return
this
.AccountLevel2Template;
}
else
if
(item
is
TreeAccountLevel3)
{
return
this
.AccountLevel2Template;
}
else
if
(item
is
TreeAccountLevel4)
{
return
this
.AccountLevel2Template;
}
else
if
(item
is
TreeAccountLevel5)
{
return
this
.AccountLevel2Template;
}
else
if
(item
is
TreeAccountLevel6)
{
return
this
.AccountLevel6Template;
}
else
if
(item
is
TreeContract)
{
return
this
.ContractTemplate;
}
else
if
(item
is
TreeBill)
{
return
this
.BillTemplate;
}
return
null
;
}
}
public
class
CheckStateConverter : IValueConverter
{
#region IValueConverter Members
public
object
Convert(
object
value, Type targetType,
object
parameter, System.Globalization.CultureInfo culture)
{
bool
? result = (
bool
?)value;
if
(result.HasValue)
{
return
result.Value ? ToggleState.On : ToggleState.Off;
}
else
return
ToggleState.Indeterminate;
}
public
object
ConvertBack(
object
value, Type targetType,
object
parameter, System.Globalization.CultureInfo culture)
{
ToggleState state = (ToggleState)value;
if
(state == ToggleState.Indeterminate)
return
null
;
else
return
state == ToggleState.On ?
true
:
false
;
}
#endregion
}
public
class
TreeBaseItem : INotifyPropertyChanged
{
public
int
Id {
get
;
set
; }
public
string
Name {
get
;
set
; }
private
bool
isExpanded;
public
bool
IsExpanded
{
get
{
return
isExpanded;
}
set
{
if
(value != isExpanded)
{
isExpanded = value;
OnPropertyChanged(
"IsExpanded"
);
}
}
}
public
bool
? IsSelected {
get
;
set
; }
#region INotifyPropertyChanged Members
private
void
OnPropertyChanged(
string
propertyName)
{
if
(PropertyChanged !=
null
)
{
PropertyChanged(
this
,
new
PropertyChangedEventArgs(propertyName));
}
}
public
event
PropertyChangedEventHandler PropertyChanged;
#endregion
}
public
class
TreeTopLevel : TreeBaseItem
{
public
List<TreeAccountLevel1> Childs {
get
;
set
; }
}
public
class
TreeAccountLevel1 : TreeBaseItem
{
public
int
ParentId {
get
;
set
; }
public
List<TreeAccountLevel2> Childs {
get
;
set
; }
}
public
class
TreeAccountLevel2 : TreeBaseItem
{
public
int
ParentId {
get
;
set
; }
public
List<TreeAccountLevel3> Childs {
get
;
set
; }
}
public
class
TreeAccountLevel3 : TreeBaseItem
{
public
int
ParentId {
get
;
set
; }
public
List<TreeAccountLevel4> Childs {
get
;
set
; }
}
public
class
TreeAccountLevel4 : TreeBaseItem
{
public
int
ParentId {
get
;
set
; }
public
List<TreeAccountLevel5> Childs {
get
;
set
; }
}
public
class
TreeAccountLevel5 : TreeBaseItem
{
public
int
ParentId {
get
;
set
; }
public
List<TreeAccountLevel6> Childs {
get
;
set
; }
}
public
class
TreeAccountLevel6 : TreeBaseItem
{
public
int
ParentId {
get
;
set
; }
public
List<TreeContract> Childs {
get
;
set
; }
}
public
class
TreeBill : TreeBaseItem
{
public
int
ParentId {
get
;
set
; }
}
public
class
TreeContract : TreeBaseItem
{
public
int
ParentId {
get
;
set
; }
public
List<TreeBill> Childs {
get
;
set
; }
}
}