我设置了ListView
来查看数据库中的一些记录,因此它绑定到ObservableCollection
SongData
:
public class SongData {
Id { get; set; }
Title { get; set; }
Artist { get; set; }
}
现在,我设置EventHandler
EventSetter
,以便在用户双击其中一个ListViewItems
时显示一个包含某种编辑格式的新窗口。当用户在新窗口中更改数据时,它将保存到数据库中。
我正试图想出一种方法来改变ListView
中的数据。我遇到了一些问题。首先,由于ObservableCollection
是私有属性,因此我无法从另一个类/窗口访问它。我可以想办法让这部分工作,但它们并不是很优雅。有什么建议吗?
其次,我不知道如何从SongData
获取正确的ObservableCollection
对象,因为我只有ID可供查找。我试图传递整个SongData
对象而不仅仅是Id,但这似乎没有用。我认为应该有一个简单的回答这个问题,但我找不到它......
主要问题是当我只有ListView
对象的Id可用时,我如何将项目从ObservableCollection<SongData>
数据绑定更改为SongData
来自另一个类。
答案 0 :(得分:1)
虽然这可以通常的方式执行,但您可以考虑实施ViewModel pattern,以便为每个Window创建一个ViewModel。
基本上,您需要将ListView的SelectedItem绑定到实现INotifyPropertyChanged的属性。
为了使其可用于其他课程,您可以在这些课程中注册PropertyChanged messages。
因此,无论何时选择一个项目,绑定到它的属性也会相应地改变,这最终将广播PropertyChanged消息,该消息将由已注册它的那些类捕获。
旁注:你的财产应该是公开的