Có thể kết nối View và ViewModel bằng cả một DataContext Declarative và một mẫu dữ liệu không?Đấu nối Chế độ xem MVVM và Chế độ xemMô hình bằng cách sử dụng DataContext Declarative cho Mẫu thiết kế và thời gian và dữ liệu cho thời gian chạy?
Mục tiêu: Tôi muốn ghép nối Chế độ xem với một Chế độ xem riêng cho thiết kế và thời gian khác tại thời gian chạy. Hiện tại, sử dụng một DataContext Declarative cho một máy ảo thời gian thiết kế và một VM được chỉ định cho Data-Template cho thời gian chạy không hoạt động như mong đợi.
nền - Có rất nhiều cách để dây lên một Xem và ViewModel bao gồm:
A.) khai báo rõ ViewModel DataContext trong của Xem XAML. Kỹ thuật này rất hữu ích tại Design-Time bằng cách sử dụng hàm tạo ít tham số để truyền dữ liệu giả.
<UserControl.DataContext>
<my: BrowseAssetsViewModel />
</UserControl.DataContext>
B.) lập trình chỉ định ViewModel, Xem và DataContext.
// …Setup code
BrowseAssetsViewModel viewModel = new BrowseAssetsViewModel(assetRegistry, domains);
BrowseAssetsView view = new BrowseAssetsView();
view.DataContext = viewModel;
Khi tiếp cận B được sử dụng kết hợp với cách tiếp cận A, tại thời gian chạy WPF đè DataContext mặc định theo quy định tại pháp tiếp cận Một sử dụng phiên bản của ViewModel với các nhà xây dựng tham số quy định tại pháp tiếp cận B.
C.) Xác định Mẫu dữ liệu cho liên kết View-ViewModel Bằng cách liên kết Chế độ xem và Chế độ xem trong ứng dụng.XAML Application.Resources, WPF có thể kết nối Chế độ xem chính xác dựa trên loại của ViewModel.
<DataTemplate DataType="{x:Type vm: BrowseAssetsViewModel }">
<vw: BrowseAssetsView />
</DataTemplate>
Nếu một tài sản ViewModel được ràng buộc với một điều khiển ContentPresenter, WPF sẽ dây-up View tương ứng (dựa trên loại của ViewModel) và đặt nó trong ContentPresenter. Điều này rất hữu ích trong kịch bản “ViewModel-first”, nơi ViewModel được trình bày và WPF giải quyết và kết nối chính xác View bằng cách kiểm tra kiểu ViewModel được trình bày.
Vấn đề - Khi sử dụng phương pháp C này kết hợp với phương pháp A, WPF giải quyết chế độ xem chính xác nhưng có vẻ sau đó truy vấn lại View, gọi ViewModel được khai báo xác định thông qua hàm tạo tham số-ít (Phương pháp A) , do đó sẽ ghi đè thuộc tính ViewModel hiện tại!
Câu hỏi - Có cách nào để sử dụng các kỹ thuật này (C và A) cùng nhau mà không A vô tình ghi đè thuộc tính C ViewModel không?
Tại sao bạn tuyên bố chỉ định DataContext của ViewModel trong XAML của Chế độ xem nếu bạn không muốn tuyên bố đó diễn ra? –
Mục đích là để tìm một kỹ thuật hỗ trợ cả hai chế độ ViewModels giả (A) thời gian thiết kế và độ phân giải DataTemplate (C) tại thời gian chạy. –