DispatcherTimer阻止UI更新?

时间:2011-09-11 05:05:18

标签: mvvm timer

我在视图中有两个按钮,一个用于录制一些声音,另一个用于录制完成录制。录制完成后,我将recording_done的VM属性设置为1,用于CanPlay(),启用播放按钮。到目前为止一切正常。

我添加了一个计时器,在两秒钟后自动停止录制。经过一些试验和错误后,我决定使用DispatcherTimer。我的问题是在我点击WPF窗口(窗口的某个地方/任何地方)之前,UI(播放按钮)没有启用。很明显,调试消息说recording_done设置为1.这应该触发UI更新,但它没有,直到我点击窗口。

我尝试了两种方法,1。录制按钮绑定到ViewModel中的Command,在那里我启动计时器并停止计时器。 2.将记录按钮处理程序和计时器代码放在视图的代码后面。类似的问题。

有什么建议吗?这是线程/ UI更新问题吗?谢谢。

1 个答案:

答案 0 :(得分:0)

如果您的播放按钮绑定了一个命令,并且命令的CanExecute()间接绑定到recording_done属性或字段,则在CanExecuteChanged事件之前它不会更新引发ICommand,或直到WPF决定重新查询命令。我怀疑这是问题所在 - 您需要ICommand加注CanExecuteChanged