I have dates bounded to TreeView. There is a wrapper class for date. Dates groups by years and months. Wrapper class also has IsSelected and IsExpanded properties:
public sealed class DateViewModel : NotificationObject, IEditableObject
{
#region properties
bool _isSelected;
public bool IsSelected
{
get
{
return _isSelected;
}
set
{
if (_isSelected != value)
{
_isSelected = value;
RaisePropertyChanged(() => IsSelected);
}
}
}
bool _isExpanded;
public bool IsExpanded
{
get
{
return _isExpanded;
}
set
{
if (_isExpanded != value)
{
_isExpanded = value;
RaisePropertyChanged(() => IsExpanded);
}
}
}
DateTime _date;
public DateTime Date
{
get
{
return _date;
}
set
{
if (_date != value)
{
_date = value;
RaisePropertyChanged(() => Date);
RaisePropertyChanged(() => Year);
RaisePropertyChanged(() => Month);
RaisePropertyChanged(() => MonthName);
RaisePropertyChanged(() => Day);
}
}
}
public int Year
{
get
{
return Date.Year;
}
}
public int Month
{
get
{
return Date.Month;
}
}
public string MonthName
{
get
{
return CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(Date.Month);
}
}
public int Day
{
get
{
return Date.Day;
}
}
#endregion properties
}
ObservableCollection of DateViewModel is used as ItemsSource for TreeView. Dates groups by CollectionViewSource ans DataTemplates:
<DataTemplate x:Key="DayTemplate">
<TextBlock x:Name="textBlock"
FontSize="14"
Text="{Binding Path=Day}" />
</DataTemplate>
<HierarchicalDataTemplate x:Key="MonthTemplate"
ItemsSource="{Binding Path=Items}"
ItemTemplate="{StaticResource DayTemplate}">
<TextBlock Text="{Binding Path=Name}" />
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="YearTemplate"
ItemsSource="{Binding Path=Items}"
ItemTemplate="{StaticResource MonthTemplate}">
<TextBlock>
<Run Text="{Binding Path=Name, Mode=OneWay}" />
<Run Text="y" />
</TextBlock>
</HierarchicalDataTemplate>
<telerik:RadTreeView Grid.Row="1"
ItemsSource="{Binding Path=Dates.View.Groups}"
ItemTemplate="{StaticResource YearTemplate}">
<telerik:RadTreeView.ItemContainerStyle>
<Style TargetType="{x:Type telerik:RadTreeViewItem}">
<Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
<Setter Property="IsExpanded" Value="{Binding Path=IsExpanded, Mode=TwoWay}" />
</Style>
</telerik:RadTreeView.ItemContainerStyle>
</telerik:RadTreeView>
The issue is: I need to expand full path to date using view model by setting IsExpanded property to true. But it doesn't have effect.
UPDATE:
Yes I created group descriptions in code. The code for expanding is simple:
public sealed class DatesViewModel
{
ObservableCollection<DateViewModel> _dates = new ObservableCollection<DateViewModel>();
public CollectionViewSource Dates {get; set;}
public DatesViewModel()
{
Dates = new CollectionViewSource { Source = _dates } ;
// add groups, sorts and fill collection
...
}
// Just a sample
public void ExpandFirstDate()
{
_dates[0].IsExpanded = true;
}
}
There is missing code above.
Also I prepared test sample TreeViewGroupingSample.7z