IEditableCollectionView失去了对CommitEdit的选择

时间:2011-09-27 03:41:54

标签: c# wpf mvvm treeview observablecollection

我有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吗?

1 个答案:

答案 0 :(得分:1)

利用MVVM获取树视图项。

在商品级别类中包含两个可写属性(用作单个树视图项的数据上下文)

  1. IsExpanded
  2. IsSelected
  3. 实现了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仅适用于整个树视图中的一个项目。

    希望这有帮助。