2010-10-21 32 views
5

Tôi đang sử dụng TreeView để hiển thị dữ liệu của mình trong giao diện người dùng. Bây giờ, ứng dụng của tôi sẽ làm mới sau mỗi 5 giây để nó hiển thị dữ liệu mới nhất. Có cách nào tôi có thể lưu trạng thái mở rộng của tôi hoặc trạng thái thu nhỏ của treeview ngay cả sau khi tải lại cửa sổ? Bởi vì nếu tôi có một lượng dữ liệu khổng lồ và tôi mất hơn 5 giây để chuyển đến dữ liệu mong muốn, TreeView chỉ thu gọn sau mỗi 5 giây với làm mới cửa sổ và tôi phải bắt đầu lại từ đầu.Lưu trạng thái WPF TreeView khi tải lại dữ liệu

 <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); 
     } 
     } 
+0

Bạn đang tái tạo lại bộ sưu tập mục mỗi 5 giây? – Rachel

+0

có .. cửa sổ tải lại/làm mới sau mỗi 5 giây. Vì vậy, tôi có nó như là một observablecollection được xóa và sau đó điền với các đối tượng .. – developer

+0

Oh cũng sau đó tài sản IsExpanded của bạn cũng được xóa mỗi 5 giây. Bất kỳ cơ hội bạn chỉ có thể cập nhật các giá trị thay vì xóa chúng và tạo lại chúng? – Rachel

Trả lời

13

tôi giải quyết vấn đề đó bằng cách thêm thuộc tính IsExpanded và IsSelected đến đối tượng mà TreeView của tôi đã được ràng buộc để

<Style TargetType="{x:Type TreeViewItem}"> 
    <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> 
    <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> 
</Style> 
+0

Tôi phải viết gì ở mã phía sau? – developer

+0

Ngoài ra, làm thế nào tôi sẽ thiết lập giá trị của IsExpanded cho mỗi nút .. – developer

+2

Nó phụ thuộc vào những gì TreeView của bạn là ràng buộc với. Nếu đó là danh sách các đối tượng tùy chỉnh thì thật dễ dàng, chỉ cần thêm hai thuộc tính boolean công khai được gọi là IsExpanded và IsSelected. Để đặt chúng, bạn không cần phải làm gì cả. Chúng sẽ mặc định là False và được cập nhật khi người dùng mở rộng/thu gọn/chọn các mục treeview vì nó đang sử dụng liên kết TwoWay – Rachel

Các vấn đề liên quan