C#双向绑定循环

本文关键字:循环 绑定 | 更新日期: 2023-09-27 18:29:56

来自Java背景,我遇到了双向绑定机制的同步问题。我有一个属性,它绑定到组合框上的选择项。

<ComboBox SelectedItem="{Binding car.hp, Mode=TwoWay}" .../>

在OnSelectionChanged事件上,我触发一个长时间运行的命令。

private void async() { 
    ...
    await longtermjob();
    ...
}

到目前为止,这一切都有效。但是,如果我在命令尚未完成的情况下快速更改组合框的选择,我就会陷入一个无限循环。"选定项目"在这两个值之间不断变化。有什么想法吗?如何确保绑定是线程安全的?

C#双向绑定循环

如果在没有停止条件的情况下更改事件中绑定属性的值,则数据更改将继续导致OnSelectionChanged激发,具体取决于更改数据的方式。如果您添加了一个布尔标志来检查异步调用是否已经在进行,那么您就不会遇到这个问题。此外,我还建议您考虑暂时禁用控制。

编辑/这是解决方案:

private bool requestInProcess { get; set; }
private void async() { 
    if (!requestInProcess) { 
        requestInProcess = true;
        await longtermjob();
        requestInProcess = false;
    }
}