2012-07-01 10 views
0

В настоящее время я использую WPF и привязки данных для отображения/обновления данных. У меня есть TreeView и ItemTemplate.Стойкий IsExpanded на ItemTemplate

<TreeView ItemsSource="{StaticResource Labels}"> 
    <TreeView.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <TreeViewItem Header="{Binding Key}"> 
        <TextBlock Text="{Binding Value}" /> 
       </TreeViewItem> 
      </Grid> 
     </DataTemplate> 
    </TreeView.ItemTemplate> 
</TreeView> 

«Ярлыки» - это словарь, который я назначил перед «InitializeComponent». Проблема в том, что каждый раз, когда я меняю данные и вызываю «Refresh» в TreeView, все элементы древовидной структуры возвращаются к сложенному состоянию, даже если они были расширены.

Как сохранить расширенные элементы в их расширенном состоянии?

EDIT: Для других, пытающихся это сделать, я просто собираюсь поставить XAML, который сработал для меня (так как мне было трудно найти его, когда я смотрел онлайн). Я сделал вспомогательный класс, который содержал IsExpanded как часть источника данных.

<TreeView ItemsSource="{StaticResource Labels}"> 
    <TreeView.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <TreeViewItem Header="{Binding Key}" 
           IsExpanded="{Binding Path=Value.IsExpanded, Mode=TwoWay}"> 
        <TextBlock Text="{Binding Value.RealValue}" /> 
       </TreeViewItem> 
      </Grid> 
     </DataTemplate> 
    </TreeView.ItemTemplate> 
</TreeView> 

ответ

1

Вы можете создать класс-оболочку под названием «Расширяемый», который обертывает ваше значение и предоставляет свойство IsExpanded. Затем привяжите значение TreeViewItems IsExpanded к ExpExable IsExpanded Property в двухстороннем режиме привязки для хранения состояния. Это должно решить вашу проблему.

0

Вы можете достичь этого, создав стиль для TreeViewItem и настроив режим привязки на два пути.

Смежные вопросы