MVVM 패턴을 사용하여 응용 프로그램을 빌드합니다. 이 응용 프로그램에서 내가 선택한 항목을 포함하는 항목의 colletion과 속성에 바인딩 된 콤보 상자가 있습니다WPF : 변경 후 ComboBox 재설정
이 콤보 상자의 항목 컬렉션은 첫 번째와 같은 "명령 텍스트"로 초기화됩니다<ComboBox ItemsSource="{Binding Path=Persons, Mode=OneTime}"
SelectedValue="{Binding Path=SelectedPerson, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
다음 항목과 일반 항목의 무리 :
Persons.Add("Open Person...");
Persons.Add("Anders Andersson");
Persons.Add("Bengt Bengtsson");
Persons.Add("Carl Carlsson");
Persons.Add("Daniel Danielsson");
나는이 콤보에 대해 갖고 싶은 동작은 처음에 명령 텍스트를 (이것은 물론 쉽게 달성)을 보여줍니다 것입니다. 사용자가 ComboBox에서 사람을 선택하면 응용 프로그램에서 작업을 수행하고 (선택한 사람을 연 다음) 지시 텍스트로 다시 설정합니다. 사용자가 콤보 상자의 명령 텍스트보다 다른 것을 선택하면
이private string _selectedPerson = "Open Person...";
public string SelectedPerson
{
get
{
return _selectedPerson;
}
set
{
if (value != _selectedPerson)
{
OpenPerson(value);
OnPropertyChanged("SelectedPerson");
}
}
}
내 생각은, OpenPerson는()입니다 것을 :
으로 먼저 선택한 항목에 대해이 속성을함으로써이 쉬울 것이라고 생각 선택된 값으로 호출되지만 선택된 값은 개인 필드 (_selectedPerson)에 저장되지 않습니다. 그런 다음 ComboBox가 SelectedPerson 속성의 값을 읽고 자체적으로 (SelectedValue) 업데이트하도록 PropertyChanged 이벤트를 트리거합니다. _seletedPerson 필드는 여전히 지침 텍스트이기 때문에 ComboBox는 그 자체로 재설정됩니다.
이것은 작동하지 않습니다.
실제로 모든 것이 예상대로 발생했습니다. rightPerson()이 right 매개 변수와 함께 호출 된 다음 PropertyChanged 이벤트가 트리거됩니다. 그러나 ComboBox에 표시된 값을 변경하는 GUI의 동작은 실제로이 후에 수행됩니다. 즉, 내가 SelectedPerson을 설정하면 ComboBox는 GUI에서 선택된 항목을 표시합니다.
이 문제를 해결할 수있는 우아한 방법이 있습니까?
실제로, 나는이 문제를 해결했습니다. 그러나 CodeBehind의 코드, ViewModel의 두 플래그 및 SelectedPerson 속성의 불쾌한 코드가 관련되어있었습니다. 해결책은, 잘, 최소한을 말하는 만족스럽지 않습니다 ...;) 그래서, 나보다 똑똑한 사람이 더 나은 해결책을 찾을 수 있기를 바랐습니다! :)
물론! SelectionChanged 핸들러를 사용하는 것이 가장 간단한 솔루션입니다. ViewModel에서이 작업을 수행하는 방법에 대해 생각하고있었습니다. 물론, 내 코드에서 코드가 필요 없도록 위의 솔루션이 작동한다면 더 좋겠지 만 명백하게는 그렇지 않습니다. 감사합니다 잉고! :) – haagel