Tôi không biết về bất kỳ giải pháp nào trong số các giải pháp, nhưng việc tạo triển khai hộp thoại có thể tái sử dụng lại không khó như vậy. Trên thực tế, tôi đã thực hiện một cái gì đó như thế này một vài năm trước đây. Vâng nó đã được trong một công việc khác, vì vậy tôi không có quyền truy cập vào mã nữa. Ngoài ra, tôi không thể nhớ tất cả các chi tiết, nhưng tôi có thể cố gắng cung cấp cho bạn ý tưởng cơ bản về việc triển khai như vậy.
Bạn có thể tạo DialogVm
, tính năng này cung cấp chức năng hộp thoại chung.
Trước hết, điều gì cần thiết cho một hộp thoại trong lớp trình bày? Thông thường, ba nút, giống như ...
- Áp dụng, Hủy và Đóng (thoại Modification)
- Ok và Hủy hoặc Có và Không (Câu hỏi hộp thoại)
- Ok (trong trường hợp có hộp thư)
Như bạn có thể thấy, bạn cần ba lệnh (ICommand
doc). Trên thực tế, tôi đã tạo triển khai DelegateCommand
(dựa trên this). ICommand.CanExecute
xác định, cho dù một nút giới hạn bị tắt hay bật. Nếu một lệnh là null, nút sẽ bị ẩn.
(Nếu bạn sử dụng điều khiển bố trí đúng, vị trí của các nút được điều chỉnh đúng cách, nếu một nút không được hiển thị.)
Để cung cấp hỗ trợ cho hơn bốn kịch bản trên, tôi đã thêm một tài sản CommandTitle
vào DelegateCommand
, để nội dung của nút đến từ đó.
Điều tiếp theo bạn sẽ cần thuộc tính Title
cho tiêu đề của hộp thoại. Vì vậy, hãy thêm số này vào số DialogVm
.
Nếu bạn muốn có thể đóng hộp thoại (chỉ cần thiết, nếu đó là con của Window
) bằng cách thực hiện lệnh, bạn có thể theo dõi this approach. Tất nhiên tôi đã sử dụng phiên bản mà tôi đã mô tả ở đó. Nhưng những người khác cũng đang tìm kiếm đầy hứa hẹn.
Điểm mở cuối cùng là thuộc tính đại diện cho các nội dung hộp thoại khác nhau. Nếu tôi nhớ lại chính xác, tôi đã sử dụng một nhóm nhỏ các kiểu xem và tương ứng DataTemplates
(và dĩ nhiên là TemplateSelector
, cung cấp mẫu phù hợp dựa trên loại máy ảo). Tất nhiên, bạn cũng sẽ cần một điều khiển ContentPresenter
trong hộp thoại của mình, hiển thị số DataTemplate
do TemplateSelector
cung cấp.
Đây là downsite chỉ, nó chỉ là một cách tiếp cận tốt, nếu bạn chỉ có một vài loại hộp thoại khác nhau (ví dụ hộp Câu hỏi, hộp tin nhắn ...)
Việc sử dụng là khá dễ dàng. Đơn giản chỉ cần, khởi tạo một trường hợp DialogVm
với mong muốn ICommand
logic, các DialogContentVm (tuy nhiên bạn muốn gọi nó), vượt qua nó để DialogWindow (có lẽ, bạn muốn sử dụng sth. Khác nhau ví dụ như một flyout) và trình bày cho người dùng.
Tôi hy vọng điều đó sẽ hữu ích. Nếu bạn cần thêm thông tin hoặc bất kỳ trợ giúp nào, hãy cho tôi biết.
Điều này có thể sử dụng được, với một số thích ứng.Tôi không sử dụng điều hướng, chỉ cần đơn giản và các lệnh nút, nhưng đó chỉ là nói chuyện nhỏ trong kịch bản này. Trễ hơn. Cảm ơn bạn. – ProfK
Vì đây là một giải pháp khả thi cho vấn đề của bạn, làm thế nào để đánh dấu nó là câu trả lời? –