【发布时间】:2020-01-30 18:50:04
【问题描述】:
有人可以向我解释为什么 ItemsControl 只在我通过 Caliburn.Micro 框架(按钮 x:Name="LoadView")手动重新激活我的视图时更新我的 UI。
为什么这种方式实际上会立即更新我的 UI?
Data = new BindableCollection<DataModel>
(await dataAccess.Starter(progress, cts.Token).ConfigureAwait(true));
我理解错了什么? 编辑:
private static BindableCollection<DataModel> _IDirectorys;
没有静态它根本不会更新。
private static BindableCollection<DataModel> _IDirectorys;
public BindableCollection<DataModel> Data
{
get
{
return _IDirectorys;
}
set
{
_IDirectorys = value;
NotifyOfPropertyChange(() => Data);
}
}
public async Task StartScan()
{
DataAccess dataAccess = new DataAccess();
_IDirectorys = new BindableCollection<DataModel>
(await dataAccess.Starter(progress, cts.Token).ConfigureAwait(true));
}
<ItemsControl ItemsSource="{Binding Data, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True}">
【问题讨论】:
-
看来
BindableCollection不会通知属性在添加/删除时更改,使用ObservableCollection<T>可能是解决方案,它会发布集合更改事件 -
刚刚尝试过 ObservableCollection
并且它根本没有更新它。虽然当我声明 Data 而不是 _IDirectorys 它会立即更新 -
编辑:忘了静态,有了它,效果和BindableCollection一样
标签: c# wpf caliburn.micro