Silverlight: TreeView Unselect All Items (v.2).



Silverlight 3.0, TreeView from Toolkit October 2009.

Задача: В элементе TreeView у которого есть выбранный дочерний ItemTreeView сделать так, чтоб не один элемент не был выбран. Простая задача, но что если у вас она не работает!

Решение: Есть!

Предположим вы используете следующий код:
var selectedContainer = VerticalMenuTreeView.GetSelectedContainer();
if (selectedContainer != null)
{
    selectedContainer.IsSelected = false;
}

или такой:
OrgTreeView.SetSelectedContainer(null);
но он не дает никакого результата.

Скорее всего вы прибиндили SelectedValue вашего TreeView к какому-то элемненту и забыли в привязке указать Mode=OneWay.

Вот правильный XAML:
DataContext="{Binding SelectedValue, ElementName=OrgTreeView, Mode=OneWay}"

А вот XAML приводящий к багу:
DataContext="{Binding SelectedValue, ElementName=OrgTreeView}"

Главное не забудте указать Mode=OneWay во всех привязках!

Когда вы пытаетесь в коде первым или вторым способом снять выделение в дереве, то вы, фактически, задаете в SelectedValue вашего TreeView значение null и поэтому функционал привязки (binding) без Mode=OneWay отрабатывает, как и положено в этом случае, и передает в SelectedValue прежнее выбранное значение.
И биндингу плевать, что вы то сами не можете из кода задать SelectedValue вашего дерева, т.к. у него нет открытого сеттера (set{}).

Ну чтож, ознакомлен, значит вооружен.

Вот тема из форума Silverlight на этот счет: http://forums.silverlight.net/forums/p/151973/341208.aspx

Комментарии

Популярные сообщения из этого блога

A4tech. Мышь не найдена. Пожалуйста, подсоедините мышь.

Как экспортировать контакты из iPhone

The type or namespace name 'IISOle' could not be found (are you missing a using directive or an assembly reference?)