Tôi đang cố gắng triển khai chức năng kéo và thả trong Ứng dụng bề mặt được tạo bằng mẫu MVVM. Tôi đang đấu tranh để đưa ra một phương tiện để thực hiện điều này trong khi tôn trọng mẫu MVVM. Mặc dù tôi đang cố gắng để làm điều này trong một ứng dụng bề mặt Tôi nghĩ rằng giải pháp là đủ chung để áp dụng cho WPF là tốt.Kéo và thả trong MVVM với ScatterView
Tôi đang cố gắng để tạo ra các chức năng sau:
- danh bạ tài khoản một FrameworkElement trong một ScatterViewItem để bắt đầu một hoạt động kéo (một phần cụ thể của ScatterViewItem khởi kéo/thả chức năng)
- Khi hoạt động kéo bắt đầu một bản sao của ScatterViewItem đó được tạo ra và được áp đặt trên ScatterViewItem ban đầu, bản sao là những gì người dùng sẽ kéo và cuối cùng thả
- Người dùng có thể thả mục này vào ScatterViewItem khác (được đặt trong một ScatterView riêng biệt)
Tương tác tổng thể khá giống với ứng dụng ShoppingCart được cung cấp trong SDK bề mặt, ngoại trừ các đối tượng nguồn được chứa trong một ScatterView chứ không phải là ListBox.
Tôi không chắc chắn cách tiếp tục để cho phép liên lạc thích hợp giữa Mô hình chế độ xem của mình để cung cấp chức năng này. Vấn đề chính tôi gặp phải là sao chép ScatterViewItem khi người dùng liên lạc với FrameworkElement.
Có cơ hội nhìn thấy một số mã không? Làm thế nào để ScatterViewItems giữ điều khiển trẻ em? Làm thế nào bạn ràng buộc điều này với một viewmodel? –
Tôi sẽ cố gắng cung cấp câu trả lời 'thực' sau, nhưng về cơ bản, thao tác kéo và thả xảy ra chủ yếu trong các khung nhìn.Thực tế là việc kéo đang diễn ra có thể không yêu cầu bất kỳ liên lạc nào với chế độ xem của chế độ xem ban đầu của bạn cho đến khi thả xảy ra. Khi thả được phát hiện, bạn sẽ hoặc là gọi một phương thức hoặc thực thi một lệnh trong viewmodel của bạn và truyền vào thông tin về những gì đã bị loại bỏ. VM sau đó sẽ thêm nó vào một danh sách được gắn kết với scatterview đích của bạn. Chế độ xem gốc cũng sẽ xử lý cuộc gọi đã hoàn thành thả và chuyển cho chế độ xem của nó. –