【发布时间】:2015-08-02 04:26:54
【问题描述】:
我正在使用在一个简单 WPF 应用程序的 MainWindow 类中定义的ObservableCollection。出于某种原因,列表会更新(我可以在调试时看到),但是 UI 没有更新。
现在,如果我创建一个Timer 并循环它,我可以通过设置ItemSource 来更新DataGrid。这可行,但会导致我的 DataGrid 出现可怕的闪烁。
public ObservableCollection<CalculatedData> calculatedData { get; set; }
进一步深入我的代码,我使用这一行来实际更新或添加数据到列表中。
calculatedData = await CalculateData();
CalculateData函数定义如下:
private Task<ObservableCollection<CalculatedData>> CalculateData()
{
return Task.Run(() =>
{
ObservableCollection<CalculatedData> cdList = new ObservableCollection<CalculatedData>();
// Do a lot of stuff
return cdList;
});
}
对于我的xaml,我有一个简单的 DataGrid,如下所示:
<DataGrid Name="dataGrid" ItemsSource="{Binding calculatedData}" IsReadOnly="True" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserSortColumns="False" CanUserResizeRows="False" AutoGeneratingColumn="dataGrid_AutoGeneratingColumn" />
问题:为什么 DataGrid 没有更新?由于我没有重新绑定,这会解决我的闪烁问题吗?
-
更新
我什至将我的主要声明更改为以下内容(因为我看到它这样做了),但我仍然没有让它工作。
private ObservableCollection<CalculatedData> calculatedData = new ObservableCollection<CalculatedData>();
public ObservableCollection<CalculatedData> CalculatedData
{
get { return calculatedData; }
set
{
calculatedData = value;
}
}
XAML:
<DataGrid Name="dataGrid" ItemsSource="{Binding CalculatedData}" IsReadOnly="True" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserSortColumns="False" CanUserResizeRows="False" AutoGeneratingColumn="dataGrid_AutoGeneratingColumn" />
【问题讨论】:
-
“dataGrid_AutoGeneratingColumn”中发生了什么?
-
@Sajeetharan 好问题!我正在删除某个列,只是重命名其他列标题。所以,没有什么不寻常的。
标签: c# wpf xaml data-binding datagrid