如何等待 WPF 绑定延迟完成

Rob*_*bar 5 c# wpf binding

我的 ViewModel 实现了 INotifyPropertyChanged 和 INotifyDataErrorInfo 接口。当属性更改时,将触发验证,从而启用/禁用“保存”按钮。

因为验证步骤很耗时,所以我使用了 Delay 绑定属性。

我的问题是我可以在更新“名称”属性之前键入更改并按保存。

当我按下 SaveChanges 时,我想强制立即更新 TextBox.Text。目前,我必须在执行之前添加睡眠以确保所有更改都发生在 ViewModel 上。

<TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged, Delay=1000}" />
<Button Command="{Binding SaveChanges}" />
Run Code Online (Sandbox Code Playgroud)

有没有人有一些指点?

Lin*_*ang 1

您可以在 viewModel 上实现 IPropertyChanged 接口,然后从 Name 属性设置器中检查值是否已更改,并引发该属性的 OnPropertyChanged 事件。

您可以使用该属性更改事件来连接 SaveChanges 命令 CanExecute 方法,以便在尚未更新时返回 false,如果延迟已过并且属性已更新,则返回 true。

因此,SaveChanges 按钮将保持禁用状态,直到 CanExecute 返回 true。