多个组合框取决于源

时间:2017-11-29 10:39:22

标签: c# wpf combobox

在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。

计划流程:

  • 正确设置了所有来源和值。
  • ComboBox1的值为“combobox1 value1”,ComboBox2的值为 “combobox2 value1”将ComboBox1更改为“combobox1 value2”
  • 调用SelectedComboBox1并调用RefObject.SetValue1。 此函数在RefObject上更改Value1和也值Value2 。 RefObject.Value2现在具有值“combobox2 value2”,值不是 存在于init()的ComboBox2Source中。
  • 我为ComboBox2Source调用了NotifyOfPropertyChange,它得到了更新,现在源代码中存在“combobox2 value2”的值,但是WPF调用了设置为value = null的SelectedComboBox2(猜测它是因为它不知道它改变了,因为我们没有'通知了它)

如果我调用NotifyOfPropertyChange(()=&gt; SelectedComboBox2);首先,该值不存在于源中,因此无法设置。

处理此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

  

调用SelectedComboBox1并调用RefObject.SetValue1。   此函数在RefObject上更改Value1和也值Value2

此时,我确保您的新项目在集合中,基本上强制SelectedComboBox2的值永远不会设置为ComboBox2Source以外的任何内容。

所以在RefObject.SetValue1的某个地方,在同时更改RefObject.Value2的部分,我在设置RefObject.Value2之前会包含类似的内容:

if (!ComboBox2Source.Contains(value))
{
    ComboBox2Source.Add(value)
}