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. Мышь не найдена. Пожалуйста, подсоедините мышь.

SVN: Пропали иконки TortoiseSVN.

Вывод в cmd или bat пустой строки.