这种情况,也不知道这么总结,就说一下,当时情况!
proInfo 是一个复合类,作为 ComboBox 的 SelectItem的绑定对象。
proInfo 本身是一个复合对象,它内部成员对象,与一个Run控件进行的绑定!
一旦 ComboBox 的 SelectItem 被触发,或者说SelectItem生效后,上面这个绑定就失效了。
我目前的判断是,如果一个复合对象发生的变化,比如被赋值,那么,它内部成员对象参与的绑定都会失效!
2023年4月12日-----------
再次总结
这段时间,写代码,进一步确定了这个事实:
一个复合对象发生的变化,比如被赋值,那么,它内部成员对象参与的绑定都会失效!
那如何解决这个问题呢?就是将这个复合对象也设置通知!
例子:
public LightSourceInfo lightSourceInfo { get; set; } = new LightSourceInfo();
LightSourceInfo 是一个复合对象:
public class LightSourceInfo : BindableBase
{
public const string file_name = "光源参数";
private int channelValue1;
public int ChannelValue1
{
get { return channelValue1; }
set { SetProperty(ref channelValue1, value); }
}
private int channelValue2;
public int ChannelValue2
{
get { return channelValue2; }
set { SetProperty(ref channelValue2, value); }
}
}
它的子对象,参与了binding。
一开始没啥问题。 后来我加了个功能,就是信息保存到文本(序列化),开始时读取文本(反序列化)。这样就会多了一个赋值语句:
lightSourceInfo = JsonConfigCtrl.Read<LightSourceInfo>(LightSourceInfo.file_name);
这样我的绑定就基本失效了!
那么我如果我将lightSourceInfo 也添加通知属性,我的绑定就又成功了:
//因为加了配置读取,所以有了直接的赋值,有赋值,还想bingding,就需要加,通知属性!
private LightSourceInfo _lightSourceInfo;
public LightSourceInfo lightSourceInfo
{
get { return _lightSourceInfo; }
set { SetProperty(ref _lightSourceInfo, value); }
}