Учтите, что у меня есть приложение, которое обрабатывает только Messages
и Users
. Я хочу, чтобы в моем окне была общая Menu
и область, где отображается текущий View
.
Я могу работать только с сообщениями или пользователями, поэтому я не могу работать одновременно с обоими представлениями. Поэтому у меня есть следующие Controls
- MessageView.xaml
- UserView.xaml
Просто чтобы сделать это немного проще, и Message Model
, и User Model
выглядят так:
Теперь у меня есть следующие три модели представления:
- MainWindowViewModel
- UsersViewModel
- MessagesViewModel
UsersViewModel
и MessagesViewModel
оба просто извлекают ObserverableCollection<T>
его относительно Model
, который связан с соответствующим View
следующим образом:
<DataGrid ItemSource="{Binding ModelCollection}" />
MainWindowViewModel
подключает два разных Commands
, которые реализовали ICommand
, что выглядит примерно так:
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;
}
И есть еще один, похожий на него, который покажет пользователям. Теперь введено ViewModelBase
, которое содержит только следующее:
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));
Это свойство зависимости используется в MainWindow.xaml
для динамического отображения User Control
следующим образом:
<UserControl Content="{Binding PartialViewModel}" />
На этом Window
также есть две кнопки, которые запускают команды:
- ShowMessagesCommand
- ShowUsersCommand
И когда они запускаются, UserControl изменяется, потому что PartialViewModel
является свойством зависимости.
Я хочу знать , является ли это плохой практикой? Разве я не должен вводить пользовательский контроль таким образом? Есть ли другая «лучшая» альтернатива, которая лучше соответствует шаблону дизайна? Или это хороший способ включить частичные представления?