I use the following codes to navigate between views:
public class MainPageViewModel : ViewModelBase
{
#region Properties
private object _selectedViewModel;
public object SelectedViewModel
{
get { return _selectedViewModel; }
set { SetProperty(ref _selectedViewModel, value); }
}
private string _pageVisibility;
public string PageVisibility
{
get { return _pageVisibility; }
set { SetProperty(ref _pageVisibility, value); }
}
public ICommand MenuCommand
{
get { return new DelegateCommand<object>(SwitchViews, (p) => true); }
}
#endregion
#region Methods
private void SwitchViews(object param)
{
switch (param)
{
case "Catalogue":
SelectedViewModel = new CatalogueViewModel();
BackButtonVisibility = "Visible";
break;
case "EquipmentIdentity":
EquipmentIdentityViewModel vm = new EquipmentIdentityViewModel();
SelectedViewModel = vm;
PageVisibility = "Visible";
BackButtonVisibility = "Visible";
break;
}
}
#endregion
public MainPageViewModel()
{
PageVisibility = "Collapsed";
}
}
ANd then the DataTemplate is:
<!--Equipment Identity view-->
<DataTemplate DataType="{x:Type VM:EquipmentIdentityViewModel}">
<View:EquipmentIdentity />
</DataTemplate>
<!--Catalogue view-->
<DataTemplate DataType="{x:Type VM:CatalogueViewModel}">
<View:CatalogueView />
</DataTemplate>
The code-behind for view is only:
public partial class EquipmentIdentity : UserControl
{
public EquipmentIdentity()
{
InitializeComponent();
}
}
When I run the code, it instantiates the selected ViewModel twice. One time by
EquipmentIdentityViewModel vm = new EquipmentIdentityViewModel();
and another tome by view's code-behind.
How can I fix this propblem?
What I have tried:
I provided my code in the question context.