使用Mvvm时将datacontext viewmodel绑定到usercontrol视图

Mik*_*kel 1 wpf xaml user-controls mvvm

我需要一些帮助将viewModel绑定到我创建的两个usercontrol视图.

创建了一个应该包含这两个用户控件的预留窗口.

我得到了什么:

  • ReservationView(窗口)
  • ReservationListView(Usercontrol)
  • ReservationDetailView(Usercontrol)

ReservationView(Window)类

public partial class ReservationView : Window
{
    public ReservationView()
    {
        InitializeComponent();
        //DataContext = null;              
    }
}
Run Code Online (Sandbox Code Playgroud)

ReservationListView(Usercontrol)类:

public partial class ReservationListView : UserControl, IViewReservationListViewModel
{
    public ReservationListView(IViewReservationListViewModel viewModel)
    {
        InitializeComponent();
        DataContext = viewModel;
    }
}
Run Code Online (Sandbox Code Playgroud)

IViewReservationListViewModel只是一个空接口,它在usercontrol视图和viewModel之间建立联系.

ReservationListViewModel

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

    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试在ReservationView中的xaml中设置本地:"usercontrol"时,我收到以下错误:

The type "ReservationListView" does not include any accessible constructors.
Run Code Online (Sandbox Code Playgroud)

当我使用MVVM时,如何将这两个usercontrol链接到相应的viewModel?

Cle*_*ens 6

你通常会有一个MainViewModel

class MainViewModel
{
    public ReservationListViewModel ReservationListViewModel { get; set; }
    public ReservationDetailViewModel ReservationDetailViewModel { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并会在你的XAML中使用它

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

<local:ReservationListView DataContext="{Binding ReservationListViewModel}"/> 
<local:ReservationDetailView DataContext="{Binding ReservationDetailViewModel}"/> 
Run Code Online (Sandbox Code Playgroud)

您的UserControls不需要任何带参数的构造函数.