Сложно создать автоматическую сортировку в виде списка (WPF) - PullRequest
0 голосов
/ 17 марта 2011

Цель:
Последние добавленные данные должны быть в первой строке списка (WPF). Часть сортировки основана на дате столбца.

Проблема:
Не знаю, как сделать автоматическую сортировку в списке после добавления данных.

Пожалуйста, помните, что я не использую источник синтаксиса, источник списка и привязки.

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>

1 Ответ

0 голосов
/ 17 марта 2011

Попробуйте создать что-то вроде этого (слегка измененное из 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...