c# - 从 ViewModel 中提取数据
问题描述
我有一个视图模型:
public class CreateRepositoryViewModel : BaseViewModel
{
private Repository _repository;
public Repository Repository
{
get => _repository;
set
{
_repository = value;
OnPropertyChanged();
}
}
}
(BaseViewModel 实现 IPropertyChanged 接口来简化)
然后我将视图模型绑定到我的页面,如下所示:
DataContext = new CreateRepositoryViewModel();
然后我有多个绑定到 ViewModel 的表单字段:
<TextBox Text="{Binding Path=Repository.LicenceTemplate}" />
<CheckBox IsChecked="{Binding Path=Repository.HasIssues}" VerticalAlignment="Center"/>
在页面内的按钮单击事件模型上,我试图像这样提取数据:
var model = (CreateRepositoryViewModel) DataContext;
但是,数据上下文中的 Repository 属性返回 null。如何在 xaml 页面后面的 .cs 文件中获取这些数据?
解决方案
ViewModel 中的存储库属性需要实例化。
DataContext = new CreateRepositoryViewModel { Repository = new Models.Repository() };
或者,为属性的支持字段分配一个非空初始值。
public class CreateRepositoryViewModel : BaseViewModel
{
private Repository _repository = new Models.Repository();
...
}
那么这就足够了:
DataContext = new CreateRepositoryViewModel();