개체 이름 (Client)과 ObservableCollection (연락처 이름) 속성을 내 Silverlight보기에 바인딩합니다. 내 Client 클래스에는 is라는 문자열 속성과 Contacts라는 ObservalbeCollection 속성이 있습니다. 내 viewmodel에는 Client (INotifyPropertyChanged를 구현하는)라는 Client라는 객체의 속성이 있습니다. 나는이 같은 개체의 ObervableCollection 내보기에서리스트 박스를 결합하는 경우 :Silverlight에서 ViewModel 속성을 볼 수있게 만들기
ItemsSource = "{바인딩 경로 = Client.Contacts, 모드 = 양방향}"
및 컬렉션에 연락 항목을 추가, 보기가 제대로 업데이트되고 새로 추가 된 연락처가 표시됩니다. 이 모든 것이 훌륭하게 작동합니다.
나는이 공공 ObservableCollection에 연락처처럼 내 뷰 모델에 연락처 속성을 만들 경우 { { 반환 Client.Contacts를 얻을; } 및
에옵니다 ItemsSource = "{바인딩 경로 = 연락처, 모드 = 양방향을}"바인딩은
은보기가 업데이트되지 않습니다.
Client.Contacts.Add (newContact)
이왜 연락처의 목록 상자가 업데이트되지 않습니다
는이 같은 클라이언트에 연락처 항목을 추가? 어떻게 그렇게 변경할 수 있습니까? Client.Contacts 바인딩을 사용할 수 있습니까? 새 연락처를 추가 한 후 코드를 중단하면 새 새 연락처 객체가 컬렉션에 추가되지만보기에는 추가가 표시되지 않습니다.
문제점을 해결했습니다. 다음과 같이 컬렉션에 항목을 추가 할 때 : Client.Contacts.Add (newContact) 바인딩은 기본 속성 변경에 대해 절대로 알리지 않습니다. 따라서 속성 중 하나를 업데이트했음을 바인딩에 알리기 위해 Contact 속성에 대해 PropertyChanged 이벤트를 발생 시켰고 이제 바인딩에 알립니다. 필자의 경우 ItemsSource를 Contacts 속성에 바인딩하고 변경 사항에 응답 할 수 있습니다. 도움 주셔서 감사합니다. – DaveB
하지만 설명하는 솔루션에서 성능이 저하되는 것을 볼 수 있습니다. 모든 컬렉션 추가/제거에 대해 전체 ItemsControl이 아이템 비주얼을 재구성하도록하는 propertychanged 이벤트를 발생시키고 있습니다. 이는 나쁘다고 생각합니다. 오히려 일반적인 방법은 INotifyCollectionChanged (ObservableCollection에 내장되어 있음)를 발생시키고 ItemsControl이 모든 항목을 다시 만들지 않고 항목에 대해 관련성있는 Visual 만 빌드하도록합니다. –
컬렉션에 백업 변수를 사용하고 항목을 추가 및 제거해도 propertychanged 이벤트가 실행됩니까? – DaveB