ObservableCollection 不更新 ListView (WPF) [重复]
Posted
技术标签:
【中文标题】ObservableCollection 不更新 ListView (WPF) [重复]【英文标题】:ObservableCollection doesn't update ListView (WPF) [duplicate] 【发布时间】:2021-11-15 03:33:42 【问题描述】:到目前为止,我有一个简单的设置,并希望有一个显示最近日志的列表视图。
这是主窗口构造函数:
public MainWindow()
var MWViewModel = new ViewModel.MainWindowViewModel();
DataContext = MWViewModel;
Tools.Logger.LogEntry("Initialized", "Boot", "Welcome");
InitializeComponent();
MWViewModel.updateLogs();
日志记录工作正常。 在 Viewmodel 中看起来像这样:
class MainWindowViewModel : ViewModelBase
public ObservableCollection<Models.LogModel> _logs;
public ObservableCollection<Models.LogModel> Logs
get => _logs;
set => SetProperty(ref _logs, value);
public void updateLogs()
_logs = Tools.Logger.getLogs();
getLogs 函数也可以正常工作,这意味着 _logs 具有数据库的所有日志记录条目。
XAML 看起来像这样:
<ListView x:Name="logs_viw" ItemsSource="Binding Logs">
<ListView.View >
<GridView>
<GridViewColumn Width="120" Header="Timestamp" DisplayMemberBinding="Binding timestamp"/>
<GridViewColumn Width="120" Header="Program" DisplayMemberBinding="Binding program"/>
<GridViewColumn Width="120" Header="Section" DisplayMemberBinding="Binding section"/>
<GridViewColumn Width="610" Header="Log" DisplayMemberBinding="Binding log"/>
</GridView>
</ListView.View>
</ListView>
最后,模型是这样的
class LogModel
public string timestamp;
public string program;
public string section;
public string log;
很简单,但到目前为止还行不通。 ListView 确实显示“某些东西”,它具有正确数量的空行数据行?!我错过了什么? 提前致谢!!
【问题讨论】:
【参考方案1】:WPF 不支持将数据绑定到字段。请改用属性。
你可以做的就是改变你的班级看起来像这样:
class LogModel
public string Timestamp get; set;
public string Program get; set;
public string Section get; set;
public string Log get; set;
更多信息 -> Why does WPF support binding to properties of an object, but not fields?
【讨论】:
谢谢,不知道!它现在就像一个魅力以上是关于ObservableCollection 不更新 ListView (WPF) [重复]的主要内容,如果未能解决你的问题,请参考以下文章
从 ViewModel WPF 更新 XAML 中的 ComboBox ObservableCollection 绑定
更新 ObservableCollection 无法正确更新 Xamarin 表单中的 ListView
ObservableCollection CollectionChanged 更新数据网格