Просмотр Silverlight в виде дерева

Я использую элемент управления в виде дерева в моем проекте silverlight. Я использую привязку данных для привязки моей модели к дереву. Это отлично работает.

После добавления некоторых функций в дерево я столкнулся с двумя проблемами:

  1. Когда я изменяю свойство в своей модели, дерево не обновляется даже после того, как вызывается мое onproperty, а также мой конвертер не вызывается? (Мне нужно скрыть элемент при изменении определенного свойства) (ответ)

  2. Как скрыть предмет в дереве? (Я использую текстовое поле + изображение в качестве шаблона элемента)

  3. Панель стека скрыта, но пустой контейнер остается в дереве

DataTemplate:

                <common:HierarchicalDataTemplate ItemsSource="{Binding Children}">
                <StackPanel Orientation="Horizontal" Visibility="{Binding IsAvailable, Converter={StaticResource ItemVisibleConverter} ,Mode=TwoWay}"  >
                    <Image Source="{Binding Converter={StaticResource ImageConverter}}"/>
                    <controls:Label Name="myItem" Content="{Binding Description, Converter={StaticResource ItemConverter} ,Mode=TwoWay}" Foreground="Black"/>
                </StackPanel>
            </common:HierarchicalDataTemplate>

Конвертер: общедоступный объект Convert (значение объекта, тип targetType, параметр объекта, культура ystem.Globalization.CultureInfo) {return GetVisibility (value); }

        private Visibility GetVisibility(object value)
    {
        bool IsVisible= (bool)value;
        if (IsAvailableForDownload)
        {
            return Visibility.Visible;
        }
        else
        {
            return Visibility.Collapsed;
        }
    }

Модель

    public class MyModel: INotifyPropertyChanged
{
    public bool IsAvailable
    {
        get
        {
            return _IsAvailableForDownload;
        }
        set
        {
            _IsAvailableForDownload = value;
            onPropertyChanged(this, "IsAvailableForDownload");
        }
    }

//Code for on property changed event
}

С Уважением


person Community    schedule 14.08.2009    source источник
comment
Можете ли вы опубликовать Xaml, где вы настраиваете привязку данных (HierarchialDataTemplate для вашего дерева), а также небольшую часть класса Model, показывающую вашу реализацию INotifyPropertyChanged? Публикация кода конвертера тоже поможет.   -  person James Cadd    schedule 17.08.2009


Ответы (1)


  1. Вероятно, вам нужно убедиться, что ваша модель реализует INotifyPropertyChanged, чтобы система обвязки может делать свою работу.

  2. У вас может быть свойство типа Visibility, к которому привязывается ваш шаблон элемента, или bool плюс преобразователь значений, который возвращает значение Visibility?

    ‹DataTemplate› ‹Видимость сетки =" {Binding ThisThingsIsVisible} "› ‹Button Content =" {Binding Blah} "/› ‹/Grid› ‹/DataTemplate›

Я не знаю, рекомендуется это или нет - может ли ваш связанный объект не отображать скрытые элементы в своих коллекциях?

person Jeff Wilcox    schedule 16.08.2009
comment
Привет, Джефф, большое тебе спасибо. INotify решил мою первую проблему, но я все еще борюсь с номерами два и три. Любой совет? - person ; 19.08.2009
comment
Возникла ошибка или вам нужны инструкции по добавлению видимости в объект данных или модель представления? - person Jeff Wilcox; 19.08.2009