사용자가 작업중인 JobType을 선택할 수있는 ComboBox가 있습니다. ComboBox에는 AllJobTypes의 목록이 있습니다. 문제는 사용자가 새 JobType을 추가 할 때부터 JobType을 AllJobTypes ObservableCollection에 추가 한 다음 정렬 할 때 발생합니다. 정렬이 발생하면 ComboBox get은 선택 취소되고 실제로 이유는 알 수 없습니다. 이 프로세스에서는 JobConfig.SelectedJobType.Name이 변경되지 않습니다. ComboBox를 손상시키지 않는 관찰 가능한 컬렉션을 정렬하는 방법이 있습니까?WPF ObservableCollection을 정렬하면 ComboBox가 선택 취소됩니다.
<Window ...
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
...>
<Window.Resources>
<CollectionViewSource x:Key="cvs" Source="{Binding AllJobTypes}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="Name"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</Window.Resources>
...
<ComboBox ItemsSource="{Binding Source={StaticResource cvs}}"
DisplayMemberPath="Name"
SelectedValuePath="Name"
SelectedValue="{Binding JobConfig.SelectedJobType.Name}"/>
...
</Window>
:
public class JobTypeList : ObservableCollection<JobType> {
public void SortJobTypes() {
var sortableList = new List<JobType>(this);
sortableList.Sort((x, y) => x.Name.CompareTo(y.Name));
//this works but it creates a bug in the select for JobTypes
for (int i = 0; i < sortableList.Count; i++) {
this.Move(this.IndexOf(sortableList[i]), i);
}
}
대신 뷰 모델에서 컬렉션을 정렬, 당신이 SortDescription
을 지정할 수 있습니다 CollectionViewSource
에 콤보 상자의 ItemsSource를 결합한다의 XAML
<ComboBox Grid.Column="0" SelectionChanged="JobTypeComboBox_SelectionChanged"
Name="JobTypeComboBox"
ItemsSource="{Binding Path=AllJobTypes}"
DisplayMemberPath="Name"
SelectedValuePath="Name"
SelectedValue="{Binding
Path=JobConfig.SelectedJobType.Name}" />
당신이 SelectedValue보다는 ItemsSource/selectedItem가 쌍으로 결합 변경해보십시오 당신의 JobTypesList 사용. SelectedValue 바인딩은 몇 가지 이유로 흡사합니다. 이것은 새로운 것이 될 수 있습니다. – Will
이로 인해 동일한 문제가 발생합니다. –
No repro. 넌 다른 뭔가 잘못하고있어. – Will