2016-07-02 3 views
-5

ObservableCollection 개체에 새 데이터를 추가하는 방법은 무엇입니까? 코드의이 부분이 작동하지 않는 몇 가지 이유를 들어 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"}); 

, 나는 거기에 무엇을해야합니까?

미리 감사드립니다.

+3

클래스 정의 자체에 명령문을 넣을 수 없으며 대신 함수에 넣을 수 있습니다. 귀하의 장소에 대한 공공 설립자를 갖는 것은 나쁜 생각입니다 : 그것을 대체 할 때 귀하는 통보되지 않습니다 – stijn

+0

그래, 고마워. 이것은 올바른 코드입니다 : 'public class ViewModel { public ViewModel() { AddNewPlace(); } ... 개인 무효의 AddNewPlace() { places.Add (새 장소 { ID = 3, 시티 = "마이애미", 나라 = "USA" }); } } – Navuhodonosor

답변

0

내가 추측 할 수있는 코드는 모두 보지 않아도됩니다. 하지만 Place 클래스가 INotifyPropertyChanged를 구현합니까? 필요하지 않으면 콜렉션에 변경이 발생했음을 알리고 바인딩이 올바르게 갱신 될 수 있습니다.

0

언제 새로운 장소를 컬렉션에 추가할지 모릅니다. 그러나이 같은 뷰 모델 클래스의 메소드를 사용할 수 있습니다

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

당신은 또한 당신의보기 모델의 외부에서 장소를 추가하기 위해 직접 장소-속성을 사용할 수 있습니다.

viewModel.Places.Add(new Place 
{ 
    Id = 3, 
    City = "Miami", 
    Country = "USA" 
}); 

Btw은 :이보기 모델의 구현 세부 사항이기 때문에 당신이 외부에서 전체 모음을 변경하지 마십시오 때문에 당신은 당신의 장소-재산 세터를 제거해야합니다.

관련 문제