從昨天開始,我一直在爲我的問題尋找解決方案。我建立一個MVVM模式的問題。 我有兩個用戶控件,它們都包含一個列表框。當使用MVVM單擊按鈕時對列表框進行排序
第一個用戶控件叫做SearchView,它包含項目名稱列表框,用戶可以選擇並保存到應用程序本地數據庫。
當選擇的項目增加了一個事件,通知其被命名爲「ProjectView」第二個用戶控件被觸發。這個用戶控件只顯示哪些項目在本地保存。見下圖。
的問題是,我希望能夠排序在projectview列表框中上升的名字。因此,如果用戶首先添加「測試項目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>
在此先感謝
這是否(http:// st ackoverflow.com/questions/1280704/how-can-i-sort-a-listbox-using-only-xaml-and-no-code-behind)爲你解決了什麼問題? – 2013-05-03 10:47:43
爲什麼不在你的projectwrapper類中實現IComparable接口,然後你使用Projects.Sort()? – 2013-05-03 10:55:09
是的,我一直在看這個問題,並嘗試相同的。但它沒有正確排列我的列表。如果我添加了Project 3,然後Proejct 2,它的排序是正確的 - > Project 1,然後是Project 3.但是當Project 2被添加時,應該在兩個項目的middel中,它被添加到了直列表框的頂部。 – mskydt86 2013-05-03 11:04:26