Тэги

Silverlight (36) WPF (10) IIS (7) Visual Studio (7) SharePoint (6) .Net Framework (5) ODP.NET (5) ASP.NET (4) C# (4) common (4) Network Settings (3) JavaScript (2) MS Office (2) Resharper (2) WCF (2) WEB (2) XPath (2) XSLT (2) ADO.NET (1) APEX (1) CMD (1) CSS (1) EF (1) HTML (1) Hardware bugs (1) Java (1) MS SQL (1) Oracle (1) PDF (1) Version Control (1) XAML (1)

четверг, 4 марта 2010 г.

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

Комментариев нет:

Отправить комментарий