首页 > 解决方案 > 从 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 文件中获取这些数据?

标签: c#wpfxaml

解决方案


ViewModel 中的存储库属性需要实例化。

DataContext = new CreateRepositoryViewModel { Repository = new Models.Repository() };

或者,为属性的支持字段分配一个非空初始值。

public class CreateRepositoryViewModel : BaseViewModel
{
    private Repository _repository = new Models.Repository();
    ...
}

那么这就足够了:

DataContext = new CreateRepositoryViewModel();

推荐阅读