2009-12-03 2 views
4

두 개의 텍스트 상자가있는 눈금의 항목 템플릿 상수 인 ListView에 사전을 바인딩하려고합니다. 이상 적으로 ListView에 표시된 KeyValuePair의 키와 값을 모두 수정할 수 있어야합니다. 그게 가능하니?ListView TwoWay 바인딩 - 사전 가능?

+0

예,하지만 저는 ViewModel과 같은 intemiteite 클래스가 없으면이를 수행 할 수 없습니다. 사전에 직접 바인딩하는 것이 가장 중요합니까? – angrifel

+0

좋습니다. 사전은 내 응용 프로그램의 설정 등을 보유하기로되어 있습니다. – Maciek

답변

2

당신이 찾고있는 것은 ObservableCollection<T>과 유사하지만 사전입니다. 인터넷 검색의 비트는 Dr. WPF on building an ObservableDictionary에서 다음과 발견 :

장단점을

물론, 관찰 사전을 사용하는 이점은, 사전에 데이터 바인딩 된 컨트롤의 ItemsSource 역할을 할 수 있다는 것입니다 및 다른 사전에 액세스하는 것과 같은 방식으로 코드에서 사전에 계속 액세스 할 수 있습니다. 그것은 진정으로 색인 된 객체 사전입니다. 사전을 관찰 가능하게 만드는 아이디어에는 고유 한 한계가 있습니다. 사전은 속도를 위해 만들어졌습니다. 관찰 가능한 컬렉션의 동작을 사전에 바인딩하여 프레임 워크가 바인딩 할 수 있으면 오버 헤드가 추가됩니다.

또한 사전은 동일한 이름의 별도 속성을 통해 ValuesKeys 모음을 노출합니다. 이러한 컬렉션은 각각 Dictionary<TKey, TValue>.ValueCollectionDictionary<TKey, TValue>.KeyCollection 유형입니다. 이러한 CLR 정의 모음은 관찰 할 수 없습니다. 따라서 Values ​​컬렉션이나 Keys 컬렉션에 직접 바인딩 할 수없고 동적 컬렉션 변경 알림을받을 것으로 기대할 수 있습니다. 대신 관측 가능 사전에 직접 바인딩해야합니다.

지금, 당신은 당신이 어떻게 든 이동 귀하의 항목으로 사전을 설득 할 필요가 같은 키를 업데이트에 문제로 실행할 수 있습니다. Dr. WPF의 ObservableDictionary을 대신 사용하고 KeyedCollection을 보조 저장소로 사용하는 것이 좋습니다. 그런 식으로 Key는 Item 자체에서 파생되며 업데이트는 ObservableDictionary의 객체를 자동으로 이동합니다.

+0

이전에 ObservableDictionary를 본 적이 있지만 운이 없었습니다 2 -way 바인딩, 주로 읽기 전용 키로 인해 – Maciek

+0

그 이유는 당신이 항목에서 키를 파생 KeyedCollection 사용해야합니다. 키와 사전이 포함 된 Item의 속성에 바인딩하는 방식으로 그에 따라 업데이트됩니다 (어쩌면). – user7116

2

KeyValuePair 구현을 보면 읽기 전용 속성으로 키와 값이 모두있는 구조체이므로이 경우 TwoWay 바인딩을 만들 수 없다고 생각됩니다.

키를 변경할 때 사전 추가 및 항목 제거를 처리하는 INotifyPropertyChange를 상속하는 클래스를 만들거나 값을 변경할 때만 값을 변경하면 가능합니다.

+0

안녕하세요, 해당 링크에 액세스하는 데 문제가 있습니다. – Maciek

+0

OK 링크를 새로 고치고 각 키와 값 속성을 클릭하면 읽기 전용임을 알 수 있습니다. – jmayor