Wpf – Binding datacontext viewmodel to usercontrol view when using Mvvm

mvvmuser-controlswpfxaml

I need some help binding the viewModel to the two usercontrol views I have created.

Have created a Reservation Window that should contain these two usercontrols.

What i got:

  • ReservationView (Window)
  • ReservationListView (Usercontrol)
  • ReservationDetailView (Usercontrol)

ReservationView (Window) class

public partial class ReservationView : Window
{
    public ReservationView()
    {
        InitializeComponent();
        //DataContext = null;              
    }
}

ReservationListView (Usercontrol) class:

public partial class ReservationListView : UserControl, IViewReservationListViewModel
{
    public ReservationListView(IViewReservationListViewModel viewModel)
    {
        InitializeComponent();
        DataContext = viewModel;
    }
}

The IViewReservationListViewModel is just a empty interface which makes the contact between the usercontrol view and the viewModel.

ReservationListViewModel

public class ReservationListViewModel : INotifyPropertyChanged, IViewReservationListViewModel
{
    public ReservationListViewModel()
    {

    }
}

When I try to set the local:"usercontrol" in the xaml inside ReservationView, I get the following error:

The type "ReservationListView" does not include any accessible constructors.

How should I link those two usercontrol to the respective viewModels when I use MVVM?

Best Answer

You would usually have a MainViewModel like

class MainViewModel
{
    public ReservationListViewModel ReservationListViewModel { get; set; }
    public ReservationDetailViewModel ReservationDetailViewModel { get; set; }
}

and would use it in your XAML like

<Window.DataContext>
    <local:MainViewModel/>
</Window.DataContext>

<local:ReservationListView DataContext="{Binding ReservationListViewModel}"/> 
<local:ReservationDetailView DataContext="{Binding ReservationDetailViewModel}"/> 

Your UserControls wouldn't need any constructors with parameters.

Related Topic