C#双向绑定循环

时间:2013-09-03 10:00:16

标签: c# xaml data-binding windows-8 windows-runtime

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

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

在OnSelectionChanged事件中,我触发长时间运行命令。

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

到目前为止,这一切都有效。但是如果我在命令尚未完成时快速更改组合框选择,我会遇到无限循环。选定项目在两个值之间不断变化。任何想法如何发生这种情况?我怎样才能确保绑定是线程安全的?

1 个答案:

答案 0 :(得分:3)

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

编辑/这是解决方案:

private bool requestInProcess { get; set; }

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