У меня есть приложение WPF с шаблоном MVVM.У меня есть главное окно с несколькими вкладками.При нажатии на разные кнопки в главном окне, его пользовательский контроль будет отображаться.У меня это работает нормально.Тем не менее, мне нужно открыть пользовательский элемент управления при нажатии кнопки в одном из пользовательских элементов управления.Не из главного окна.Как мне это сделать?Это то, что у меня есть:
MainWindow.XAML: я создаю шаблоны данных для каждого пользовательского элемента управления
<DataTemplate DataType="{x:Type homeViewModel:HomeWindowViewModel}">
<homeViewModel:HomeWindow></homeViewModel:HomeWindow>
</DataTemplate>
<DataTemplate DataType="{x:Type viewModel:PauseViewModel}">
<viewModel:Pause></viewModel:Pause>
</DataTemplate>
<DataTemplate DataType="{x:Type logoffVM:LogOffViewModel}">
<logoffVM:LogOff></logoffVM:LogOff>
</DataTemplate>
<DataTemplate DataType="{x:Type viewModel:ReportViewModel}">
<viewModel:Report></viewModel:Report>
</DataTemplate>
И пользовательские элементы управления отображаются внутри ItemsControl:
<Grid x:Name="UserControlGrid" Width="Auto" Height="auto" Margin="100,40,0,0">
<ItemsControl ItemsSource="{Binding ViewsToShow}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid IsItemsHost="True" Width="auto" Height="auto"></Grid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Grid>
У меня есть кнопки, связанные с командой в классе MainWindow ViewModel.
В MainWindowViewModel:
public ObservableCollection<ObservableObject> ViewsToShow
{
get
{
return viewsToShow;
}
set
{
viewsToShow = value;
OnPropertyChanged("ViewsToShow");
}
}
Команды:
public ICommand GetNextCommand
{
get { return new RelayCommand(() => GetNext()); }
}
public ICommand GetOrderCommand
{
get { return new RelayCommand(() => GetOrder()); }
}
И методы загрузки пользовательских элементов управления:
public void GetNext()
{
Order orders = new Order();
ViewsToShow.Clear();
ViewsToShow.Add(new OrderDisplayViewModel("GetNext", orders, new WindowFactory()));
}
public void GetOrder()
{
ViewsToShow.Clear();
ViewsToShow.Add(new GetOrderViewModel());
}
Все этоработает нормально из MainWindow.Но как открыть пользовательский элемент управления GetOrder из пользовательского элемента управления GetNext?
Есть идеи?