WPF按钮IsEnabled绑定PropertyChanged事件不异步触发

时间:2014-03-24 20:00:09

标签: wpf xaml asynchronous mvvm inotifypropertychanged

我有一个带有Button的XAML窗口,其IsEnabled属性绑定到窗口ViewModel中的布尔属性。

XAML:

 <Button
 IsEnabled="{Binding SearchButtonEnabled}"
 Command="{Binding Search}"
 Content="Search" />

视图模型:

       public bool SearchButtonEnabled
       {


            get
            {
                return _searchButtonEnabled;
            }
            set
            {
                if (_searchButtonEnabled != value)
                {
                    _searchButtonEnabled = value;
                    PropertyChanged(this, new PropertyChangedEventArgs("SearchButtonEnabled"));
                }
            }
        }

在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可能会有问题,但我没有在这种情况下找到一个很好的理由。任何帮助或指导表示赞赏。

0 个答案:

没有答案