WPF按钮已启用绑定的PropertyChanged事件未异步触发

WPF按钮已启用绑定的PropertyChanged事件未异步触发,wpf,xaml,asynchronous,mvvm,inotifypropertychanged,Wpf,Xaml,Asynchronous,Mvvm,Inotifypropertychanged,我有一个带有按钮的XAML窗口,它的IsEnabled属性绑定到窗口的ViewModel中的布尔属性 XAML: 在ViewModel构造函数中,我调用了一个async函数来填充一个DataGrid: private async void LoadSearchGrid() { string sql = "Query that takes a long time"; SqlCommand gridSourceCommand = new

我有一个带有
按钮的XAML窗口
,它的
IsEnabled属性绑定到窗口的ViewModel中的布尔属性

XAML:

在ViewModel构造函数中,我调用了一个
async
函数来填充一个
DataGrid

private async void LoadSearchGrid()
        {
            string sql = "Query that takes a long time";
            SqlCommand gridSourceCommand = new SqlCommand(sql, conn);

            SearchFilters = new DisplaySearchFilterCollection();

            SearchButtonEnabled = false;
            SearchGridSource = await getDataTableAsync(gridSourceCommand);
            SearchButtonEnabled = true;
        }
现在,给我带来问题的代码是:

SearchButtonEnabled = true;

该行禁用
SearchButtonEnabled
属性始终有效,而启用该属性的行仅有时有效。如果我将“花费很长时间的查询”替换为“花费很少时间的查询”,则该属性可以正常启用,UI也会相应更新。否则按钮将保持禁用状态。我已经对这个主题进行了研究,很明显,如果在工作线程上更新UI可能会有问题,但是我还没有找到一个很好的理由。感谢您的帮助或指导。

您是否绝对确定您的等待会结束?我刚刚编写了一个非常快速的应用程序,它只执行了一个
线程。Sleep()
(来自一个异步方法),并且成功地工作了60秒的延迟。@Steve我在下面的行中添加了一个断点,它确实中断了。我能够单步执行属性设置程序,并看到属性设置为true。请尝试用以下代码替换“长查询”,以模拟长暂停,看看它是否可能是您的查询:
public async Task WaitAsynchronouslyAsync(){wait Task.Delay(60000);返回“Finished”}
(或类似的内容)“@Steve很不幸,这也不起作用。谢谢你的建议。
private async void LoadSearchGrid()
        {
            string sql = "Query that takes a long time";
            SqlCommand gridSourceCommand = new SqlCommand(sql, conn);

            SearchFilters = new DisplaySearchFilterCollection();

            SearchButtonEnabled = false;
            SearchGridSource = await getDataTableAsync(gridSourceCommand);
            SearchButtonEnabled = true;
        }
SearchButtonEnabled = true;