2011-03-17 50 views
0

目标:
最新添加的数据应该在列表视图(WPF)的第一行。排序部分基于列日期。很难在列表视图(WPF)中创建自动排序

问题:
不知道如何在添加数据后在列表视图中进行自动排序。

请记住,我不使用语法itemsource,列表和绑定源。

public partial class FlightForm : Window 
{ 

    public delegate void TakeOffHandler(object source, TakeOffEventArgs e); 
    public delegate void ChangeHandler(object source, ChangeRouteEventArgs e); 

    public event TakeOffHandler TakeOffEvent; 
    public event ChangeHandler ChangeEvent; 


    public FlightForm() 
    { 
     InitializeComponent(); 

     Title = "Flight "; 

     cmbStatus.Visibility = Visibility.Hidden; 
     btnLand.Visibility = Visibility.Hidden; 
    } 



    private void btnStart_Click(object sender, RoutedEventArgs e) 
    { 

     cmbStatus.Visibility = Visibility.Visible; 
     btnLand.Visibility = Visibility.Visible; 
     btnStart.Visibility = Visibility.Hidden; 

     TakeOffEvent(this, new TakeOffEventArgs("a", "b", DateTime.Now.ToString())); 
     ChangeEvent(this, new ChangeRouteEventArgs("aa", "bb", "cc")); 


    } 




} 

/// <summary> 
/// Interaction logic for MainWindow.xaml 
/// </summary> 
public partial class ControlTower : Window 
{ 
    public ControlTower() 
    { 
     InitializeComponent(); 
    } 

    private FlightForm myFlightForm; 


    private void btnSendNextAirplane_Click(object sender, RoutedEventArgs e) 
    { 
     myFlightForm = new FlightForm(); 

     myFlightForm.TakeOffEvent += new FlightForm.TakeOffHandler(PrintOutTakeOff); 
     myFlightForm.ChangeEvent += new FlightForm.ChangeHandler(PrintOutChange); 
     myFlightForm.Show(); 

    } 




    public void PrintOutTakeOff(object source, TakeOffEventArgs e) 
    { 

     lstDisplay.Items.Add(new { FlightCode = e.FlightCode, Status = e.Status, Time = e.Time }); 

    } 


    public void PrintOutChange(object source, ChangeRouteEventArgs e) 
    { 
     string test = e.FlightCode + e.Status + e.Time; 

     MessageBox.Show(test); 
    } 




} 

<Window x:Class="Assignment3.ControlTower" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Control Tower" Height="326" Width="420"> 
    <Grid Height="282"> 
     <Button Content="Send next Airplane to Runway" Height="23" HorizontalAlignment="Left" Margin="225,250,0,0" Name="btnSendNextAirplane" VerticalAlignment="Top" Width="163" Click="btnSendNextAirplane_Click" /> 
     <TextBox Height="23" HorizontalAlignment="Left" Margin="81,250,0,0" Name="txtFlightCode" VerticalAlignment="Top" Width="120" /> 
     <Label Content="Next flight:" Height="28" HorizontalAlignment="Left" Margin="6,250,0,0" Name="label1" VerticalAlignment="Top" /> 
     <ListView Height="244" HorizontalAlignment="Left" Margin="12,0,0,0" Name="lstDisplay" VerticalAlignment="Top" Width="372"> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="Flight Code" Width="70" DisplayMemberBinding="{Binding FlightCode}" /> 
        <GridViewColumn Header="Status" Width="160" DisplayMemberBinding="{Binding Status}" /> 
        <GridViewColumn Header="Time" Width="120" DisplayMemberBinding="{Binding Time}" /> 
       </GridView> 
      </ListView.View> 
     </ListView> 
    </Grid> 
</Window> 

<Window x:Class="Assignment3.FlightForm" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="FlightForm" Height="305" Width="352"> 
    <Grid> 
     <Button Content="Start" Height="23" HorizontalAlignment="Left" Margin="0,216,0,0" Name="btnStart" VerticalAlignment="Top" Width="75" Click="btnStart_Click" /> 
     <ComboBox Height="23" HorizontalAlignment="Left" Margin="81,216,0,0" Name="cmbStatus" VerticalAlignment="Top" Width="120" Visibility="Visible" /> 
     <Button Content="Land" Height="23" HorizontalAlignment="Left" Margin="217,216,0,0" Name="btnLand" VerticalAlignment="Top" Width="75" /> 
    </Grid> 
</Window> 

回答

0

努力创造这样的事情(从MSDN略有修改):

private void Sort(string sortBy, ListSortDirection direction) 
{ 
    // The MSDN version pass ItemsSource property 
    ICollectionView dataView = 
     CollectionViewSource.GetDefaultView(lv.Items); 

    dataView.SortDescriptions.Clear(); 
    SortDescription sd = new SortDescription(sortBy, direction); 
    dataView.SortDescriptions.Add(sd); 
    dataView.Refresh(); 
} 

并使用它如下:

lstDisplay.Items.Add(new { FlightCode = e.FlightCode, Status = e.Status, Time = e.Time }); 
Sort("Time", ListSortDirection.Descending);