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
Комментарии
Отправить комментарий