我有一个绑定到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();
}
...那什么也没做。 我在这里做错了什么?在项目选择交互过程中,有什么方法可以设置组合框的项目?
答案 0 :(得分:0)
弄清楚了:我需要使.container
异步调用,因为我将在同一过程中触发两次RaisePropertyChanged,并且只能“看到”第一个。
sendToDevice()