MVVM WPF 응용 프로그램에서 알람을 관리하는 데 사용되는 마스터 세부 정보보기가 있습니다. AlarmDetails 뷰에는 ComboBox 컨트롤을 통해 설정된 여러 속성이 있습니다. 그 중 하나는 Alarm의 Source이며 다른 View (SourcesView)에서 해당 소스를 변경하여 AlarmDetailsView의 콤보 박스 내용을 변경합니다. 데이터 흐름콤보 상자 항목 소스 바인딩 문제
방법은 비교적 간단
소스는 SourcesView의 컬렉션에 추가-
메시지가 SourcesView로부터 전송되는 각각의 모든 AlarmDetailsViewModel
- 소스 컬렉션에 의해 수신
- 그에 따라 AlarmDetailsViewModel이 변경되고 ObservableCollection이므로 변경 내용을 각 바인딩 대상에 알립니다.
- AlarmDetailsView의 DataContext가 선택된 AlarmDetailsViewModel로 설정되므로 Ite 해당 소스 ComboBox의 msSource 속성이 업데이트되었습니다 (더미 변환기를 사용하여 디버그에서 ItemsSource로 전달되는 업데이트 된 컬렉션을 볼 수 있으며 새로 추가 된 항목이 포함되어 있음)
- 이 모든 일이 발생하면 탐색 할 때 AlarmsView/AlarmDetailsView 탭에서 소스 콤보 상자의 항목에는 새 항목이 포함되어 있지 않습니다.
- 마스터 목록에서 새 알람을 선택하고 원본을 다시 선택하면 콤보 상자에 새 항목이 잘 표시됩니다 (마스터 목록에서 항목을 선택하면 AlarmDetailsView의 DataContext 속성이 업데이트됩니다).
저는이 문제를 놓치고 있습니다. 저는 잠시 동안이 문제를 푸념했습니다.
누구나 아이디어가 있으십니까? 모든 디버깅 제안 사항?
감사합니다,
알렉스
편집 : 알람 개체의 속성 (즉, 소스 등)를 설정하는 데 사용되는 것을 의미의 AlarmDetailsView 내 위치 업데이트하지 않습니다 콤보. 희망이 도움이됩니다.
EDIT 2 : 다른 해결책은 목록 대신 ObservableCollection을 사용하는 것이 었습니다. 어떤 이유로, 위에서 설명한대로 List에서 PropertyChange 이벤트를 발생 시키면 ComboBox가 해당 ItemsSource를 새로 고치지 만 해당 드롭 다운에 새 항목을 추가하지는 않습니다. ObservableCollection을 사용하면 propertychange 이벤트를 자체적으로 관리하므로 이벤트를 발생시킬 필요가 없습니다.
작동하지 않습니다. 귀찮게하는 것은 바인딩에 추가 한 변환기를 통해 업데이트되는 실제 ComboBox 컬렉션을 볼 수 있다는 것입니다. 컬렉션이 변경되면 Converter가 호출되고 통과하는 객체 (ItemsSource 컬렉션)에는 새 항목이 포함됩니다. 그러나 마스터 목록에서 선택한 알람을 변경하기 전까지는 드롭 다운에 표시되지 않습니다. – alex
음, 그 문제도있었습니다. 그것을 해결하기 위해 해킹했다 .... 컬렉션을 비우고, GUI를 통보, gui에게 통보 된 실제 컬렉션을 추가 ... 지옥으로 추악한하지만 나를 위해 일했습니다 – debe
그러나 그것은 못생긴 즉, 작동합니다. 주석 대신 답으로 게시하면 답변으로 표시됩니다. (누군가가 진정한 해결책을 제시하지 않는다면 우리 모두에게 도움이 될 것입니다! :-)) – alex