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

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

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" }); } }'

标签: wpf mvvm observablecollection


【解决方案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 属性上的设置器,因为您不应该从外部更改整个集合,因为这是您的视图模型的实现细节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      • 2015-11-10
      • 1970-01-01
      相关资源
      最近更新 更多