Hãy xem xét rằng tôi có một ứng dụng chỉ xử lý Messages
và Users
Tôi muốn Cửa sổ của tôi có một số Menu
phổ biến và khu vực hiện tại View
được hiển thị.Bao gồm xem một phần khi áp dụng mẫu thiết kế Mode-View-ViewModel
Tôi chỉ có thể làm việc với Tin nhắn hoặc Người dùng để tôi không thể làm việc đồng thời với cả hai Chế độ xem. Vì vậy, tôi có Controls sau
- MessageView.xaml
- UserView.xaml
Chỉ cần để làm cho nó dễ dàng hơn một chút, cả hai Message Model
và User Model
trông như thế này:
- Tên
- Mô tả
Bây giờ, tôi có ba ViewModels sau:
- MainWindowViewModel
- UsersViewModel
- MessagesViewModel
Các UsersViewModel
và MessagesViewModel
cả chỉ cần lấy một ObserverableCollection<T>
của liên quan đến nó Model
bị ràng buộc trongtương ứngnhư thế này:
<DataGrid ItemSource="{Binding ModelCollection}" />
Các MainWindowViewModel
móc lên hai khác nhau Commands
rằng đã thực hiện ICommand
trông giống như sau:
public class ShowMessagesCommand : ICommand
{
private ViewModelBase ViewModel { get; set; }
public ShowMessagesCommand (ViewModelBase viewModel)
{
ViewModel = viewModel;
}
public void Execute(object parameter)
{
var viewModel = new ProductsViewModel();
ViewModel.PartialViewModel = new MessageView { DataContext = viewModel };
}
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
}
Và có nhau một như nó sẽ hiển thị người dùng . Bây giờ này giới thiệu ViewModelBase
mà chỉ nắm giữ sau:
public UIElement PartialViewModel
{
get { return (UIElement)GetValue(PartialViewModelProperty); }
set { SetValue(PartialViewModelProperty, value); }
}
public static readonly DependencyProperty PartialViewModelProperty =
DependencyProperty.Register("PartialViewModel", typeof(UIElement), typeof(ViewModelBase), new UIPropertyMetadata(null));
sự phụ thuộc này được sử dụng trong MainWindow.xaml
để hiển thị User Control
dynamicly như thế này:
<UserControl Content="{Binding PartialViewModel}" />
Ngoài ra còn hai nút trên Window
này kích hoạt các Lệnh:
- ShowMessagesCommand
- ShowUsersCommand
Và khi chúng được bắn, những thay đổi UserControl vì PartialViewModel
là một tài sản phụ thuộc.
Tôi muốn biết nếu đây là thực tiễn không tốt? Tôi có nên không tiêm Điều khiển người dùng như thế này không? Có cách nào khác "tốt hơn" thay thế tương ứng tốt hơn với mẫu thiết kế? Hoặc đây có phải là cách hay để bao gồm một phần lượt xem không?
Thật tuyệt, tôi thích điều đó. –
Nhân tiện, có vấn đề gì khi sử dụng phương pháp này thay thế không? Điều gì sẽ là lợi ích từ việc sử dụng một khung MVVM thay vào đó? –
bạn có thể sử dụng bất kỳ khung mvvm nào và giải pháp này hoặc bạn có thể sử dụng bất kỳ khung công cụ mvvm nào và không phải giải pháp này;) nó không phụ thuộc lẫn nhau. có một vài giải pháp cách bạn có được chế độ xem của mình cho chế độ xem của bạn và ngược lại. cái này ở đây là một wpf đơn giản được xây dựng trong – blindmeis