按字母排序列表框中的项目?

时间:2013-12-15 02:19:57

标签: c# sorting listbox windows-phone

我在我的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();

    }

1 个答案:

答案 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>