2013-12-15 47 views
0

我在我的MainViewModel中使用此函數作爲我的列表框的itemssource ...但我不知道如何按字母順序對它們進行排序。請幫我按字母排序列表中的項目?

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

沒有人能幫助我嗎? :( – user3084513

回答

1

的問題是,當DataContext設置( this.DataContext = App.MainViewModel;),Data的會員App.MainViewModel爲空,因此不會被綁定。有幾種方法來解決這個問題,最簡單的就是訂單改成這樣:

public Show() 
{ 
    InitializeComponent(); 
    App.MainViewModel.LoadData(); 
    this.DataContext = App.MainViewModel; 
} 

替代解決方案

另一種解決方案是通過將其設定爲確保數據不爲空,例如在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> 
+0

偉大的傢伙......很好的答案!非常感謝 – user3084513