C# 绑定到WPF中空对象属性的属性
我正在编写一个实用程序来创建和编辑我们的应用程序套件中的自定义数据字段。在我们的代码中,每个数据字段称为一个元素,每个元素都有0或1个需求对象。一个需求对象由一个布尔表达式和一条错误消息组成,它们都作为字符串保存在内存中 现在,我有一个视图,它有单独的选项卡,一个用于常规元素数据,另一个用于元素的需求数据。用作视图上下文的viewmodel具有公共元素属性。我的问题是,“常规”选项卡上的绑定工作正常(即C# 绑定到WPF中空对象属性的属性,c#,wpf,mvvm,C#,Wpf,Mvvm,我正在编写一个实用程序来创建和编辑我们的应用程序套件中的自定义数据字段。在我们的代码中,每个数据字段称为一个元素,每个元素都有0或1个需求对象。一个需求对象由一个布尔表达式和一条错误消息组成,它们都作为字符串保存在内存中 现在,我有一个视图,它有单独的选项卡,一个用于常规元素数据,另一个用于元素的需求数据。用作视图上下文的viewmodel具有公共元素属性。我的问题是,“常规”选项卡上的绑定工作正常(即Text=“{Binding Element.Description}”)。但是,如果加载视图
Text=“{Binding Element.Description}”
)。但是,如果加载视图时元素的Requirement属性为null,则Requirement(Text=“{Binding Element.Requirement.Condition}”
)选项卡上的绑定不起作用。当我遇到断点时,查看元素对象,即使在将数据输入textblocks之后,Requirement属性仍然为null
我在viewmodel中的元素setter中使用了以下内容
public Element Element {
get{return _element;}
set{
if (value == _element) return;
if (_element != null) _element.OnPropertyChanged -= ElementChanged;
_element = value;
if (_element != null) _element.OnPropertyChanged += ElementChanged;
OnPropertyChanged();
}
}
public void ElementChanged(){
OnPropertyChanged("Element");
}
我在元素类中的需求设置器中做同样的事情,并且所有三个都从INotifyPropertyChanged实现。在这一点上,我完全不知道我需要做什么
需要注意的一点是:我不想在viewmodel的构造函数中设置
Element.Requirement=new Requirement()
,因为这将尝试将空白记录保存到数据库中。查看setter的最后一行,然后查看底部方法的方法签名。您可以编写一个值转换器。当发生更改时,它接收一个对象实例,然后解析属性并将其设置为所需的非空值,例如string.empty;