Tôi đã tìm kiếm giải pháp cho vấn đề của mình kể từ hôm qua. Im xây dựng một vấn đề với mô hình MVVM. Tôi có hai usercontrol, cả hai đều chứa một listbox.Sắp xếp một hộp danh sách khi một nút được bấm bằng cách sử dụng MVVM
Điều khiển người dùng đầu tiên được gọi là SearchView chứa một hộp danh sách tên dự án, mà người dùng có thể chọn và lưu vào db ứng dụng cục bộ.
Khi dự án được lựa chọn được thêm vào một sự kiện là bắn mà thông báo cho usercontrol 2 được đặt tên là "ProjectView". Điều này usercontrol chỉ đơn giản là cho thấy các dự án được lưu cục bộ. Nhìn vào hình dưới đây.
Vấn đề là tôi muốn để có thể loại ListBox tăng dần theo tên trong projectview. Vì vậy, nếu người dùng đầu tiên thêm "Test Project 2" và afterwords thêm "Test Project 1" thì "Test Project 1" được hiển thị ở phía trên cùng của hộp danh sách.
Tôi đã cố gắng sử dụng ICollectionView và ListCollectionView nhưng im thực sự rất bối rối vào lúc này.
Bây giờ Mã của tôi trông như thế này, trong ProjectViewModel mà cần phải sắp xếp ListBox:
public ProjectViewModel() {
this.collectionView = CollectionViewSource.GetDefaultView(this.Projects);
}
private ObservableCollection<ProjectWrapper> _project = new ObservableCollection<ProjectWrapper>();
public ObservableCollection<ProjectWrapper> Projects
{
get { return _project; }
set
{
_project = value;
OnPropertyChanged("Projects");
}
}
mã XAML:
<UserControl.Resources>
<CollectionViewSource x:Key="cvs" Source="{Binding Path=Projects}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="ProjectWrapper.Project.Name" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</UserControl.Resources>
<ListBox Name="ProjectsList" ItemsSource="{Binding Source={StaticResource cvs}}" SelectedItem="{Binding Path=SelectedProject}" HorizontalContentAlignment="Stretch" BorderThickness="0" Grid.Row="1" Grid.RowSpan="3" Margin="0,0.4,-0.2,27.8">
<ListBox.ItemTemplate>
<DataTemplate>
<DockPanel>
<TextBlock Text="{Binding Path=ProjectModel.Name}" HorizontalAlignment="Left" VerticalAlignment="Center" Padding="3,2,0,0" />
<CheckBox IsChecked="{Binding Path=IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Right" VerticalAlignment="Center" Padding="0,2,5,0" Margin="0,2.5,0,0" />
</DockPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Cảm ơn trước
Điều này (http: // st ackoverflow.com/questions/1280704/how-can-i-sort-a-listbox-using-only-xaml-and-no-code-behind) làm sáng tỏ cho bạn? –
Tại sao bạn không thực hiện giao diện IComparable trong lớp projectwrapper của bạn và sau đó bạn làm Projects.Sort()? –
Vâng tôi đã nhìn vào câu hỏi đó, và cố gắng như vậy. Nhưng nó không phân loại danh sách của tôi đúng cách. Nếu tôi thêm Project 3, và sau đó Proejct 2 nó được sắp xếp đúng -> Project 1, sau đó là Project 3. Nhưng sau đó khi Project 2 được thêm vào nên nằm trong middel của hai dự án, nó sẽ được thêm vào đầu danh sách til . – mskydt86