我在我的MainViewModel中使用此函数作为我的列表框的项目源...但我不知道如何按字母顺序对它们进行排序。请帮帮我
public void LoadData()
{
if (Data == null)
{
var oderedFullName = (from Member b in MemberDB.Members
select b).OrderBy(b => b.FullName);
Data = new ObservableCollection<Member>(oderedFullName);
}
}
也尝试了这个:
public void LoadData()
{
if (Data == null)
{
var oderedFullName = from Member b in MemberDB.Members
orderby b.FullName
select b;
Data = new ObservableCollection<Member>(oderedFullName);
}
}
并将其加载到Show.xaml
public Show()
{
InitializeComponent();
this.DataContext = App.MainViewModel;
App.MainViewModel.LoadData();
}
答案 0 :(得分:1)
问题是,当设置DataContext(this.DataContext = App.MainViewModel;
)时,Data
上的成员App.MainViewModel
为空,因此不会绑定。有几种方法可以解决这个问题,最简单的方法是将顺序更改为:
public Show()
{
InitializeComponent();
App.MainViewModel.LoadData();
this.DataContext = App.MainViewModel;
}
替代解决方案
另一个解决方案是确保Data不为null,例如通过在MainViewModel构造函数中设置它,如下所示:
public MainViewModel()
{
Data = new ObservableCollection<Member>();
}
然后在LoadData中执行以下操作:
public void LoadData()
{
var orderedFullName = (from Member b in MemberDB.Members orderby b.FullName select b);
Data.Clear();
foreach (Member m in orderedFullName)
Data.Add(m);
}
此外,对于这两种解决方案,您的XAML应该如下所示:
<ListBox ItemsSource="{Binding Data}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding FullName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>