2010-01-30 34 views
7

Có thể cuộn đến một hàng cụ thể (theo nhận dạng đối tượng) trong Silverlight DataGrid có số ItemsSourcePagedCollectionView.Bạn có thể sử dụng ScrollIntoView() với PagedCollectionView trong Silverlight DataGrid không?

Tôi đang tải danh sách các đơn đặt hàng được nhóm theo ngày/trạng thái, v.v. Tôi cần có thể cuộn đến một đơn đặt hàng cụ thể.

var pcv = new PagedCollectionView(e.Result.Orders); 
gridOrders.ItemsSource = pcv; 

Thật không may, ScrollIntoView(order) không hoạt động do PagedCollectionView.

An article on DataGrid from MSDN cho thấy rằng bạn có thể cuộn đến một nhóm trong một PagedCollectionView, nhưng điều đó không thực sự được sử dụng nhiều.

foreach (CollectionViewGroup group in pcv.Groups) 
    { 
     dataGrid1.ScrollIntoView(group, null); 
     dataGrid1.CollapseRowGroup(group, true); 
    } 

Có cách nào để thực hiện việc này không?

Trả lời

7

Có, bạn có thể cuộn các mục vào chế độ xem khi nguồn mục là PagedCollectionView. Tôi sử dụng cả phương pháp cuộn nhóm mà bạn mô tả và tôi cuộn mục hiện được chọn vào dạng xem. Để làm điều này, tôi có một phương pháp helper mà sử dụng điều phối để gọi các hoạt động như sau:

private void ScrollCurrentSelectionIntoView() 
{ 
    this.dataGrid.Dispatcher.BeginInvoke(() => 
    { 
     this.dataGrid.ScrollIntoView(
      this.dataGrid.SelectedItem, 
      this.dataGrid.CurrentColumn); 
    }); 
} 

tôi đã sử dụng BeginInvoke bởi vì nếu không, các cuộc gọi đến ScrollIntoView sẽ thất bại khi gọi trực tiếp từ một event handler (có lẽ vì DataGrid đã không cập nhật đúng trạng thái của nó cho sự kiện đang được xử lý). Cách tiếp cận này đảm bảo rằng xử lý sự kiện hiện tại hoàn thành đúng cách trước khi gọi cuộn.

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