在caliburn.micro MVVM项目中,我有多个组合框。它们绑定到一个属性,该属性计算要在下拉列表中显示的值。
public string SelectedComboBox1
{
get { return RefObject.Value1; }
set {
RefObject.SetValue1(value);
NotifyOfPropertyChange(() => ComboBox2Source);
NotifyOfPropertyChange(() => SelectedComboBox2);
}
}
public List<string> ComboBox1Source
{
get { return CalculateComboBox1(); }
}
public string SelectedComboBox2
{
get { return RefObject.Value2; }
set { RefObject.SetValue2(value); }
}
public List<string> ComboBox2Source
{
get { return CalculateComboBox2(RefObject.Value1); }
}
问题是当我在ComboBox1上设置值并调用SelectedComboBox1时,函数RefObject.SetValue1将Value2设置为默认值。
所以我尝试在源和值上调用notify更改。源会更新,但是当它确实调用SelectedComboBox2时,使用null参数。这会将值设置为null。
计划流程:
如果我调用NotifyOfPropertyChange(()=&gt; SelectedComboBox2);首先,该值不存在于源中,因此无法设置。
处理此问题的最佳方法是什么?
答案 0 :(得分:0)
调用SelectedComboBox1并调用RefObject.SetValue1。 此函数在RefObject上更改Value1和也值Value2 。
此时,我确保您的新项目在集合中,基本上强制SelectedComboBox2
的值永远不会设置为ComboBox2Source
以外的任何内容。
所以在RefObject.SetValue1
的某个地方,在同时更改RefObject.Value2
的部分,我在设置RefObject.Value2
之前会包含类似的内容:
if (!ComboBox2Source.Contains(value))
{
ComboBox2Source.Add(value)
}