2010-02-22 2 views

Trả lời

0

Câu trả lời này phụ thuộc rất lớn vào cách bạn ràng buộc DataGrid của mình, cụ thể là loại cơ bản của ItemsSource của bạn là gì. Câu trả lời này giả định bạn đang sử dụng một số ObservableCollection. Vì bạn đề cập đến WPF cụ thể, tôi cũng giả sử bạn có nghĩa là .NET 4.0, vì DataGrid chỉ có sẵn trong Silverlight 3 và .NET 4.0.

tôi giả sử rằng bạn đang newing lên một hàng bằng cách gọi

ItemSource.Add(new MyObject()); 

Để có được hành vi mà bạn mong muốn, sử dụng sau đây thay vì:

ItemSource.Insert(0, new MyObject()); 
+0

Ooh đẹp .. có một cách .. nhưng thats mô phỏng các hiệu ứng hàng thêm ... bạn phải viết xử lý sự kiện và quản lý tất cả mọi thứ ... tôi có thể làm điều đó và cảm ơn bạn cho tip. tôi đang sử dụng .net 3.5 datagrid .. tôi nghĩ rằng phiên bản beta và tôi thực hiện chính xác cách bạn đã đề cập .... bất kỳ ý tưởng nào khác? – kedar

+1

DataGrid có sẵn cho .NET 3.5 nếu bạn cài đặt Bộ công cụ WPF, có sẵn trên codeplex. – Dave

0

Bạn sẽ phải viết mẫu của riêng bạn cho DataGrid nơi bạn sẽ đặt phần NewItemPlaceholder trên đầu trang của lưới. Nhìn vào điều này example để bắt đầu với (mặc dù ví dụ không phải là câu trả lời nó sẽ chỉ cho bạn đi đúng hướng).

Trên mặt lưu ý, tôi có thể hỏi tại sao bạn cần phải có NewItemPlaceholder ở trên cùng? Nó loại phá vỡ tự nhiên trên xuống dòng chảy chúng ta đang sử dụng để xem khi giao dịch với danh sách/lưới.
Cũng có thể trực quan hơn khi có mục Mục mới ở dưới cùng và tùy chọn Chèn mục trong menu ngữ cảnh cho lưới hoặc thứ gì đó dọc theo các dòng này. Đó chỉ là ý kiến ​​của tôi tất nhiên.

1

Nếu bạn đang sử dụng một cách tiếp cận MMVM, bạn có thể thêm một hàng mới programatically thích:

 var newEmp = new EmployeeViewModel(new EmployeeDto()); 
     EmployeeList.Add(newEmp); 
     EmployeeList.Move(EmployeeList.IndexOf(newEmp), 0); 

Trong ví dụ của tôi đang sử dụng một EmployeeListViewModel để hiển thị một ObservableCollection của EmployeeViewModels.

Sau đó, bạn cũng có thể viết các thử nghiệm cho hành vi này. kiểm soát Hơn trong XAML ....

/Johan

+0

Giải pháp gọn gàng +1 –

8

gì về NewItemPlaceholderPosition.AtBeginning? Tôi không có một ví dụ mã nhưng điều đó có vẻ là những gì bạn mô tả. Bạn luôn có thể làm những gì Johan đề xuất và Di chuyển hoặc Sắp xếp các mục trong lưới theo lập trình.

dụ Mã bổ sung bởi Ray Burns:

var view = CollectionView.GetDefaultCollectionView(EmployeeList) 
      as IEditableCollectionView; 
if(view!=null) 
    view.NewItemPlaceholderPosition = NewItemPlaceholderPosition.AtBeginning; 

Lưu ý rằng điều này đòi hỏi NET Framework 3.5 hoặc cao hơn.

+0

Câu trả lời tuyệt vời woodyiii (+1). Tôi đã thêm một số mã và một lưu ý về phiên bản NET Framework để làm cho câu trả lời của bạn thậm chí beter. –

+1

.GetDefaultCollectionView không phải là một phương thức trên lớp CollectionView (4.0). Là CollectionViewSource.GetDefaultView (đối tượng) cùng một điều? – Michael

+0

@RayBurns Vui lòng cập nhật mã liên quan đến .NET Framework. Mã không hoạt động cho v4 trở lên .. –