选择期间进行内部更新后,组合框用户界面会自行重置

时间:2019-05-07 21:09:28

标签: c# wpf combobox

我有一个绑定到Enum的组合框。当我在组合框中单击一个新值时,我正在向连接的设备生成一条消息并获得响应。我想将收到的任何值存档。

我的常规旧绑定属性如下:

private Enum enumValue;

public Enum EnumValue
{
   get => enumValue;
   set
   {
     if (enumValue != value)
     {
         enumValue = value;
         sendToDevice();
     }

   }

}

我从设备进行的更新如下:

    public void SetValueFromDevice(string valueFromDevice)
    {
       enumValue = (Enum)Enum.Parse(EnumType, valueFromDevice);
       RaisePropertyChanged(nameof(EnumValue));
    }

请注意,我直接设置私有变量enumValue是因为我不想在不需要的情况下向设备触发另一条外发消息。

这里是情况:假设我有一个看起来像这样的枚举:

    public enum Sources
    {
        Off,
        Low,
        Mid,
        Hi
    }

我写的固件不喜欢设备上某些版本的低值。取而代之的是,它将返回当前值。我想将其归档回组合框,而不是向用户显示不正确的值。

现在,发生的事情似乎是在我单击组合框项目之后,它向我的设备发送了一条消息,获取了响应,然后将其适当地归档了。在调用RaisePropertyChanged之后,我可以逐步浏览并看到组合框在执行“获取”操作,但是它似乎根本没有更新所选的项目。

我可以打电话给SetValueFromDevice,它总是可以正常工作,因此好像UI起作用了。

我什至试图完全用

 control.DropDownClosed += new EventHandler(SourceBox_DropDownClosed);
 ....
    private void SourceBox_DropDownClosed(object sender, EventArgs e)
    {
        ComboBox box = sender as ComboBox;
      box.GetBindingExpression(ComboBox.SelectedItemProperty).UpdateTarget();
    }

...那什么也没做。 我在这里做错了什么?在项目选择交互过程中,有什么方法可以设置组合框的项目?

1 个答案:

答案 0 :(得分:0)

弄清楚了:我需要使.container异步调用,因为我将在同一过程中触发两次RaisePropertyChanged,并且只能“看到”第一个。

sendToDevice()