IEditableCollectionView теряет выбор в CommitEdit - PullRequest
2 голосов
/ 27 сентября 2011

У меня есть 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 способ.

UPDATE:

Если дата в группе одна, изменение даты вызывает сворачивание элемента, в котором она содержится.

ОБНОВЛЕНИЕ 2:

Может быть, я не должен использовать свойство SelectedDate и работать только с IsSelected и IsExpanded?

1 Ответ

1 голос
/ 27 сентября 2011

Кредитное плечо MVVM для Tree View Item.

Включение двух доступных для записи свойств в ваш класс уровня элемента (который служит контекстом данных для вашего отдельного элемента представления дерева)

  1. IsExpanded
  2. IsSelected

Реализовать INotifyPropertyChanged и уведомить об изменении свойства в установщике двух вышеупомянутых свойств.

Теперь у TreeViewLevel есть Стиль, который связывает эти свойства.

 <TreeView.Resources>
    <Style TargetType="{x:Type TreeViewItem}">
        <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
        <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
    ....
 </...> 

Таким образом, расширение и выбор поддерживаются в древовидном представлении, пока оно поддерживается в контексте данных элемента древовидного представления.

Теперь помните, что расширенные состояния могут быть истинными для нескольких элементов, но состояние выбора true применимо только для одного элемента во всем древовидном представлении.

Надеюсь, это поможет.

...