将新数据分配给 ItemsSource 后,数据将从列表视图中消失
本文关键字:数据 消失 列表 视图 新数据 分配 ItemsSource | 更新日期: 2023-09-27 18:17:49
我有以下ListView
:
<ListView
Grid.Row="1"
ItemsSource="{Binding MeditationDiary}" >
<ListView.ItemTemplate>
<DataTemplate>
<Grid Width="{Binding ElementName=ListViewHeaders, Path=ActualWidth}" >
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock
Grid.Column="0"
Text="{Binding StartTime}" />
<TextBlock
Grid.Column="1"
Text="{Binding TimeMeditated}" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
这绑定到类型 MeditationDiary
的 MeditationDiary
属性,该属性由 MeditationEntries
组成:
public class MeditationDiary : Collection<MeditationEntry> { }
public class MeditationEntry
{
public DateTime StartTime { get; set; }
public TimeSpan TimeMeditated { get; set; }
}
ListView
绑定到此MeditationDiary
:
private MeditationDiary _meditationDiary;
public MeditationDiary MeditationDiary
{
get
{
RaisePropertyChanged(nameof(MeditationDiary));
return _meditationDiary;
}
set
{
_meditationDiary = value;
RaisePropertyChanged(nameof(MeditationDiary));
}
}
奇怪的是,当我将一个新的MeditationDiary
对象分配给属性(其中包含带有MeditationEntries
的数据(时,ListView
不再显示数据。
我在添加条目后调用的 UpdateDiary
方法中分配新的MeditationDiary
对象:
private async void UpdateDiary()
{
var latestDiary = await _repository.GetAsync();
MeditationDiary = latestDiary;
}
为什么会这样,如何解决?
这很可能是搞砸绑定的罪魁祸首:
MeditationDiary = latestDiary;
相反,请尝试清除当前集合,然后向其添加新值:
MeditationDiary.Clear();
foreach (var entry in latestDiary)
MeditationDiary.Add(entry);
添加新项后,可能需要调用集合上的RaisePropertyChanged
。
作为旁注,您可以将MeditationDiary
替换为 ObservableCollection<MeditationEntry>
,当您在其中添加/删除项目时,它会自动通知 UI。