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