У меня есть окно, на которое я загружаю UserControl, скажем Control1. Теперь, если пользователь нажимает на определенную кнопку, новый пользовательский контроллер Control2 должен быть загружен в окне, а Control1 должен исчезнуть. То же самое, когда пользователь нажимает кнопку, должен быть загружен следующий UserControl, Control3 и Control2 должен исчезнуть. Должно быть возможно также вернуться назад, например. от Control3 до Control2.Загрузите несколько UserControls в окне WPF
Загрузка первого основного UserControl в моем окне была простой, я сделал это более чем достаточно. Но я зациклился на том, как реализовать «навигацию» между Usercontrols. Никогда раньше ничего подобного не делал. Я использую MVVM для своего приложения WPF. Есть идеи?
Thx.
Edit: с ответом Рахили теперь я сделать это в команде, чтобы переключить элементы управления: В MainWindow:
<DataTemplate DataType="{x:Type ViewModel:MainControlViewModel}">
<my:MainControl />
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModel:ProductsControlViewModel}">
<my:ProductsControl />
</DataTemplate>
<Grid>
<ContentControl Content="{Binding CurrentPageViewModel, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
В MainControlViewModel и почти то же самое в изделияМинимойкиПрочее:
public ICommand LoadProductControlCommand
{
get
{
if (_loadProductControl == null)
_loadProductControl = new RelayCommand(LoadProductControl);
return _loadProductControl;
}
}
private void LoadProductControl(object notUsed)
{
_mainWindowViewModel = (MainWindowViewModel) Application.Current.MainWindow.DataContext;
_mainWindowViewModel.CurrentPageViewModel = new ProductsControlViewModel();
}
Это хороший способ, или я должен делать это по-другому? Потому что в моем приложении кнопки находятся на элементах управления, а не в главном окне.
Я просто [ответил] (http://stackoverflow.com/a/15365002/302677) другой вопрос по этому вопросу несколько часов назад. Он включает [ссылку на мой блог] (http://rachel53461.wordpress.com/2011/12/18/navigation-with-mvvm-2/), который содержит пример кода, иллюстрирующий это для загрузки, если вы хотите. – Rachel
@Rachel, я отредактировал мой вопрос с некоторыми фрагментами кода, которые я использую для вас. У меня это работает так. Можно ли изменить MainWindowViewModel.CurrentPageViewModel в команде управления? Ваша статья в вашем блоге указала мне в правильном направлении. Вы умны и хороши :) Кстати, я не могу отметить ваш ответ в качестве решения, потому что вы добавили его в качестве комментария ... – PitAttack76
Обычно мне не нравятся ссылки на компоненты пользовательского интерфейса, такие как 'Application.Current.MainWindow' из уровня ViewModel. В идеале я предпочел бы привязываться к «ICommand» в ViewModel для изменения страниц или использовать какую-либо систему сообщений для трансляции сообщений ChangePage, на которые может подписаться основной ViewModel. У меня есть [краткий обзор систем обмена сообщениями] (http://rachel53461.wordpress.com/2011/06/05/communication-between-viewmodels-with-mvvm/) в моем блоге, если вы заинтересованы – Rachel