我有日期限制在TreeView.有一个日期包装类.日期分组按年和月. Wrapper类还具有IsSelected和IsExpanded属性:
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 }
Dateviewmodel的ObservableCollection用作TreeView的ItemsSource.按CollectionViewSource和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>
问题是:我需要通过将IsExpanded属性设置为true来使用视图模型扩展到日期的完整路径.但它没有效果.
更新:
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; } }
上面缺少代码.
我也准备了测试样品TreeViewGroupingSample.7z
解决方法
TreeView绑定到CollectionViewSource.View.Groups,并且那些PropertyGroupDescription对象不包含IsSelected或IsExpanded属性,因此TreeViewItem.IsSelected和TreeViewItem.IsExpanded值具有无效绑定
您正在使用的代码将Datesviewmodel.IsExpanded设置为true.您可以通过更改日期模板来验证这一点,以显示IsExpanded的值
我建议为每一层(年,月和日)创建类,并让它们都继承自TreeNodeBase类,类包含IsSelected,IsExpanded和ObservableCollection< TreeNodeBase>的属性.儿童.不要忘记为您的子项连接一个PropertyChange通知,以便在更改TreeNodeBase.IsExpanded时,父对象的IsExpanded值也会更改
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。