WPF:ViewModel类型不包含任何可访问的构造函数

时间:2015-10-26 02:36:22

标签: c# wpf mvvm

我正在我的MainViewModel中实例化我的存储库,并将此实例传递给我的孩子ViewModel(即CategoryViewModel)。我正在接受

  

严重级代码说明项目文件行   错误类型" CategoryViewModel"不包括任何可访问的构造函数。

错误来自我的主窗口,其中我已声明了类别用户控件并将DataContext设置为CategoryViewModel

<view:CategoryView Grid.Row="2" Grid.Column="0" Margin="5">
    <view:CategoryView.DataContext>
        <viewModel:CategoryViewModel />
    </view:CategoryView.DataContext>
</view:CategoryView>

当我在CategoryViewModel构造函数中没有任何参数时,我没有收到此错误,因此我知道它与此有关但不完全确定导致问题的原因。我很感激任何建议。以下是我的MainViewModelCategoryViewModel

public class MainViewModel : BindableBase
{
    private readonly IRepository _repo = new Repository();
    private CategoryViewModel _categoryViewModel;

    public MainViewModel()
    {
        _categoryViewModel = new CategoryViewModel(_repo);
    }
}

public class CategoryViewModel : BindableBase
{       
    private IRepository _repo;
    public List<Category> CategoryCollection { get; set; }

    public CategoryViewModel(IRepository repo)
    {
        _repo = repo;            
       CategoryCollection = LoadCategory();

    }

    private List<Category> LoadCategory()
    {
        return _repo.GetAllCategories();
    }
}

2 个答案:

答案 0 :(得分:3)

如果你想要一个带参数的构造函数,你有两个选择:在后面的代码中实例化你的视图模型,或者使用ObjectDataProvider class

答案 1 :(得分:1)

这是我做的: 在 Control.Xaml 中,我把它放在顶级标记中(不知道如何将其转换为完整的xml表示法)

  d:DataContext="{d:DesignInstance Type=visuals:ControlPanelRadPaneVM, IsDesignTimeCreatable=True}"

Control.Xaml.cs 中,我添加了一个接受上下文的构造函数,将其标记为Injection Constructor并分配了dataContext:

public partial class Shell : Window
{
    [InjectionConstructor]
    public Shell(ShellViewModel context)
    {
        DataContext = context;
        InitializeComponent();
    }
}

就是这样。现在每当我做一个container.Resolve()我都得到它们。我还没有看到任何问题。但显然可以做到。