如何从另一个类更改数据绑定ListView中的项?

时间:2010-07-16 08:13:29

标签: c# wpf data-binding listview

我设置了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来自另一个类。

1 个答案:

答案 0 :(得分:1)

虽然这可以通常的方式执行,但您可以考虑实施ViewModel pattern,以便为每个Window创建一个ViewModel。

基本上,您需要将ListView的SelectedItem绑定到实现INotifyPropertyChanged的属性。

为了使其可用于其他课程,您可以在这些课程中注册PropertyChanged messages

因此,无论何时选择一个项目,绑定到它的属性也会相应地改变,这最终将广播PropertyChanged消息,该消息将由已注册它的那些类捕获。

旁注:你的财产应该是公开的