我有CollectionViewSource
,其中的日期按年和月分组。日期显示在TreeView
中(准确地显示在RadTreeView
)。
目标是更改所选日期而不重新创建视图(不要调用Refresh
方法)。
为此,我在日期视图模型中实现了IEditableObject
并更改了日期:
var selectedDate = SelectedDate;
var editableCollectionView = Dates.View as IEditableCollectionView;
if (null != editableCollectionView && !editableCollectionView.IsEditingItem)
{
editableCollectionView.EditItem(selectedDate);
selectedDate.Date = dt.Date;
editableCollectionView.CommitEdit();
}
但是在这种情况下TreeView
丢失了选择,我需要再次选择“选定项目”,这会导致刷新数据限制在选定日期。
我该如何解决这个问题?完美地使用MVVM
方式。
更新
如果组中的日期是唯一的,则更改日期会导致包含它的折叠项目。
更新2:
可能我不应该使用SelectedDate属性并且只能使用IsSelected和IsExpanded吗?
答案 0 :(得分:1)
利用MVVM获取树视图项。
在商品级别类中包含两个可写属性(用作单个树视图项的数据上下文)
实现了INotifyPropertyChanged,并在上述两个属性的setter中引发了属性更改通知。
现在TreeViewLevel
有一个Style来绑定这些属性。
<TreeView.Resources>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
....
</...>
这样,只要在树视图项的数据上下文中维护它,就会在树视图上维护扩展和选择。
现在请记住,对于多个项目,展开状态可以为true,但选择状态为true仅适用于整个树视图中的一个项目。
希望这有帮助。