gpt4 book ai didi

c# - 使用 MVVM 单击按钮时对列表框进行排序

转载 作者:太空狗 更新时间:2023-10-29 21:54:30 26 4
gpt4 key购买 nike

从昨天开始,我一直在为我的问题寻找解决方案。我正在使用 MVVM 模式构建问题。我有两个用户控件,它们都包含一个列表框。

第一个用户控件称为 SearchView,它包含一个项目名称列表框,用户可以选择并保存到应用程序本地数据库。

enter image description here

添加所选项目后,将触发一个事件,通知名为“ProjectView”的第二个用户控件。此用户控件仅显示哪些项目保存在本地。见下图。

enter image description here

问题是我希望能够在项目 View 中按名称升序对列表框进行排序。因此,如果用户先添加“测试项目 2”,然后添加“测试项目 1”,则“测试项目 1”会显示在列表框的顶部。

我尝试过使用 ICollectionView 和 ListCollectionView,但我现在真的很困惑。

所以现在我的代码看起来像这样,在需要对列表框进行排序的 ProjectViewModel 中:

 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");
}
}

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>

提前致谢

最佳答案

将元素添加到 Projects 列表时调用此方法

Projects = new ObservableCollection<ProjectWrapper>(Projects.OrderBy(x => x.Name));

关于c# - 使用 MVVM 单击按钮时对列表框进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16356957/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com