如何在 ObservableCollection 对象中添加新数据?

Posted

技术标签:

【中文标题】如何在 ObservableCollection 对象中添加新数据?【英文标题】:How to add a new data in ObservableCollection object? 【发布时间】:2016-11-04 18:04:27 【问题描述】:

public class ViewModel

    private ObservableCollection<Place> places = new ObservableCollection<Place>
    
        new Place  City = "New York", Country = "USA", ID = 1,
        new Place  City = "Chicago", Country = "USA", ID = 2
    ;

    public ObservableCollection<Place> Places
    
        get  return places; 
        set  places = value; 
    

    places.Add(new Place  Id = 3,
                            City = "Miami",
                            Country = "USA");


由于某些原因,这部分代码不起作用:

places.Add(new Place  Id = 3,
                                City = "Miami",
                                Country = "USA");

除了那个,我应该放什么?

提前致谢!

【问题讨论】:

您不能将语句放在类定义本身中,而是将它们放在函数中。除此之外,为你的地方设置一个公共设置器是个坏主意:替换它时不会通知用户界面 是的,谢谢。这是正确的代码:'public class ViewModel public ViewModel() AddNewPlace(); ... private void AddNewPlace() places.Add(new Place ID = 3, City = "Miami", Country = "USA" ); ' 【参考方案1】:

没有看到所有代码,我只能猜测。但是 Place 类是否实现了 INotifyPropertyChanged?如果不需要,则通知集合发生了更改,并且绑定可以正确更新。

【讨论】:

【参考方案2】:

我不知道您何时想将新地点添加到收藏中。 但是你可以在你的视图模型类上使用这样的方法:

public class ViewModel

    ...
    public void AddNewPlace()
    
        places.Add(new Place
        
            Id = 3,
            City = "Miami",
            Country = "USA"
        );
    

您也可以直接使用 Places 属性从视图模型之外添加地点。

viewModel.Places.Add(new Place

    Id = 3,
    City = "Miami",
    Country = "USA"
);

顺便说一句:您应该删除 Places 属性上的设置器,因为您不应该从外部更改整个集合,因为这是您的视图模型的实现细节。

【讨论】:

以上是关于如何在 ObservableCollection 对象中添加新数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在绑定到ObservableCollection时删除DataGrid的空行 ?

如何使 ObservableCollection 线程安全?

如何构建一个现代的、同步的 ObservableCollection?

如何通过工作线程更新 ObservableCollection?

Mvvm:如何更新我的ObservableCollection 从另一个ViewModel?

如何在listview - WPF MVVM上拖放后更新codeBehind中的ObservableCollection