2009-08-14 6 views
0

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

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

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

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

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

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> 

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

 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 
} 

С уважением

+0

Можете ли вы разместить Xaml, где вы настроили привязку данных (HierarchialDataTemplate для своего дерева), а также небольшую часть класса Model, показывающую вашу реализацию INotifyPropertyChanged? Проводка кода конвертера тоже помогла бы. –

ответ

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

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

    <DataTemplate> < Сетка Видимость = "{Binding ThisThingsIsVisible}" > < Кнопка Содержание = "{Binding Бла}"/> </Сетка > </DataTemplate >

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

+0

Привет, Джефф, большое спасибо. INotify решил мою первую проблему, но я все еще боюсь с номером два и три. Любой совет? – 2009-08-19 05:54:23

+0

Запуск ошибки или поиск руководства по добавлению видимости в объект данных или модель просмотра? –