Powiedzmy mam MainWindow
i MainViewModel
, nie używam MVVM światła lub Prism w tym przykładzie.
W tym MainWindow
chcę kliknąć MenuItem
lub Button
, aby otworzyć NewWindow.xaml
, a nie UserControl
.
Wiem, jak to zrobić z UserControl
, aby otworzyć nowe UserControl
w moim istniejącym oknie w ContrntControl
lub Frame
.otworzyć nowe okno w MVVM
<ContentControl Content="{Binding Path=DisplayUserControl,UpdateSourceTrigger=PropertyChanged}" />
Kod
public ViewModelBase DisplayUserControl
{
get
{
if (displayUserControl == null)
{
displayUserControl = new ViewModels.UC1iewModel();
}
return displayUserControl;
}
set
{
if (displayUserControl == value)
{
return;
}
else
{
displayUserControl = value;
OnPropertyChanged("DisplayUserControl");
}
}
}
W ResourceDitionary
dla MainWindow
mam:
<DataTemplate DataType="{x:Type localViewModels:UC1ViewModel}">
<localViews:UC1 />
</DataTemplate>
<DataTemplate DataType="{x:Type localViewModels:UC2ViewModel}">
<localViews:UC2 />
</DataTemplate>
Chodzi o to, że chcę otworzyć nowy Window
, a nie UserControl
. Więc korzystać z niektórych kodu:
private ICommand openNewWindow;
public ICommand OpenNewWindow
{
get { return openNewWindow; }
}
public void DoOpenNewWindow()
{
View.NewWindowWindow validationWindow = new View.NewWindow();
NewWindowViewModel newWindowViewModel = new NewWindowViewModel();
newWindow.DataContext = ewWindowViewModel;
newWindow.Show();
}
a potem wiążą OpenNewWindow
do MenuItem
lub Button
.
Wiem, że to nie jest właściwa droga, ale jaki jest właściwy sposób, aby to zrobić?
Dzięki!
Dlaczego uważasz, że nie jest to właściwy sposób. Masz powiązanie ICommand, które wykonuje działanie. (To wydaje się poprawne?) – sircodesalot
byłoby problem z testowaniem tego ViewModelu, ponieważ byłby on zależny od klasy NewWindowViewModel, gdybym cretował instanece w metodzie DoOpeNewWindow(), która jest w MainViewMOdel –