我正在我的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
构造函数中没有任何参数时,我没有收到此错误,因此我知道它与此有关但不完全确定导致问题的原因。我很感激任何建议。以下是我的MainViewModel
和CategoryViewModel
。
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();
}
}
答案 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()我都得到它们。我还没有看到任何问题。但显然可以做到。