在数据重新加载时保存WPF TreeView状态

dev*_*per 7 c# wpf

我正在使用TreeView在UI中显示我的数据.现在我的应用程序每5秒刷新一次,以便显示最新数据.有没有办法我可以保存我的扩展状态或树视图的崩溃状态,即使在窗口重新加载后?因为如果我有大量的数据并且需要5秒以上的时间才能获得所需的数据,那么TreeView只会在窗口刷新后每5秒钟崩溃一次,我必须从头开始.

      <TreeView ItemsSource="{Binding Sections}" Grid.Row="1"
          ItemTemplate="{StaticResource sectionTemplate}" >

        <TreeView.Resources> 
          <Style TargetType="TreeViewItem"> 
            <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
          </Style> 
        </TreeView.Resources> 

    </TreeView>

public ObservableCollection<MyViewModel> =new ObservableCollection<MyViewModel>();

public bool IsExpanded
    {
      get { return (bool)GetValue(IsExpandedProperty); }
      set { SetValue(IsExpandedProperty, value); }
    }
    public static readonly DependencyProperty IsExpandedProperty = DependencyProperty.Register("IsExpanded", typeof(bool), typeof(MyViewModel));


 if (result.TotalResults > 0)
      {
        foreach (DomainObject obj in result.ResultSet)
        {
          AT myAT= (AT)obj;
          arrdep.Add(myAT);
        }
      }
Run Code Online (Sandbox Code Playgroud)

Rac*_*hel 15

我通过将IsExpanded和IsSelected属性添加到我的TreeView绑定的对象来解决该问题

<Style TargetType="{x:Type TreeViewItem}">
    <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
    <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>
Run Code Online (Sandbox Code Playgroud)

  • 这取决于TreeView绑定的内容.如果它是自定义对象的列表,那么它很容易,只需添加两个名为IsExpanded和IsSelected的公共布尔属性.要设置它们,您不需要做任何事情.当用户展开/折叠/选择树视图项时,它们将默认为False并进行更新,因为它使用的是TwoWay绑定 (2认同)
  • @Manolete`IsExpanded`和`IsSelected`属性需要在`TreeViewItem`所拥有的任何数据对象上,因为它是DataContext.因此,如果你的`TreeView`绑定到`ObservableCollection <SomeItem>`,那么`SomeItem`需要具有`IsExpanded`和`IsSelected`属性 (2认同)