Мне нужна помощь с заданием, которое доставляет мне трудности.Используются WPF и C #.
Как обновлять подпункт каждую минуту?
Как извлечь строку выбранного выпадающего списка и добавить ее к подпункту в просмотре списка?
Мне нужно использовать диспетчер задачиногда закрывать свое приложение, я не знаю почему?
Вот часть кода, который у меня есть, и изображение того, как оно должно выглядеть.
![Application](https://i.stack.imgur.com/rS1ou.jpg)
Основной графический интерфейс
namespace Assignment_3
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public int time=0;
public MainWindow()
{
InitializeComponent();
UpdateGUI();
}
public void UpdateGUI()
{
DispatcherTimer dispatchTimer = new DispatcherTimer();
dispatchTimer.Tick += new EventHandler(dispatchTimer_Tick);
dispatchTimer.Interval = new TimeSpan(0,0,1);
dispatchTimer.Start();
}
public void dispatchTimer_Tick(object sender, EventArgs e)
{
// lvFlights.Items.Add(DateTime.Now.Hour.ToString() + ":" + DateTime.Now.Second.ToString());
// lvFlights.Items.Add(new { FlightCode = txtFlightCode.Text, Status = "sent to runaway", Time = DateTime.Now.Millisecond.ToString() });// lvFlights.Items.Count });
time ++;
// txtFlightCode.Text = (Convert.ToString(time));
CommandManager.InvalidateRequerySuggested();
lvFlights.Items.MoveCurrentToLast();
lvFlights.SelectedItem = lvFlights.Items.CurrentItem;
lvFlights.ScrollIntoView(lvFlights.Items.CurrentItem);
}
public void button1_Click(object sender, RoutedEventArgs e)
{
Flight flight = new Flight();
lvFlights.Items.Add(new { FlightCode = txtFlightCode.Text, Status = " sent to runway", Time = time +" minutes ago"});
Sort("Time", ListSortDirection.Descending);
flight.Title = "Flight " + txtFlightCode.Text;
flight.TakeOffEvent += new Flight.TakeOffHandler(PrintOutTakeOff);
flight.ChangeEvent += new Flight.ChangeHandler(PrintOutChange);
flight.LandEvent+=new Flight.LandHandler(PrintOutLand);
try
{
flight.Show();
}
catch { MessageBox.Show("damn, u can't program"); }
}
public void PrintOutTakeOff(object source, TakeOffEventArgs e)
{
lvFlights.Items.Add(new { FlightCode = txtFlightCode.Text, Status = e.Status, Time = e.Time });
Sort("Time", ListSortDirection.Descending);
}
public void PrintOutChange(object source, ChangeRouteEventArgs e)
{
lvFlights.Items.Add(new { FlightCode = txtFlightCode.Text, Status = e.Status, Time = e.Time });
Sort("Time", ListSortDirection.Descending);
}
public void PrintOutLand(object source, LandEventArgs e)
{
lvFlights.Items.Add(new { FlightCode = txtFlightCode.Text, Status = e.Status, Time = e.Time });
Sort("Time", ListSortDirection.Descending);
}
private void Sort(string sortBy,ListSortDirection direction)
{
//The MSDNversionpass ItemsSource property
ICollectionView dataView=CollectionViewSource.GetDefaultView(lvFlights.Items);
dataView.SortDescriptions.Clear();
SortDescription sd =new SortDescription(sortBy, direction);
dataView.SortDescriptions.Add(sd);
dataView.Refresh();
}
}
}
Flight GUI
namespace Assignment_3
{
/// <summary>
/// Interaction logic for Flight.xaml
/// </summary>
public partial class Flight : Window
{
public delegate void TakeOffHandler(object source, TakeOffEventArgs e);
public delegate void ChangeHandler(object source, ChangeRouteEventArgs e);
public delegate void LandHandler(object source, LandEventArgs e);
public event TakeOffHandler TakeOffEvent;
public event ChangeHandler ChangeEvent;
public event LandHandler LandEvent;
public Flight()
{
InitializeComponent();
cmbStatus.IsEnabled = false;
btnLand.IsEnabled = false;
// image1.Source = global::Assignment_3.Properties.Resources.airplane2;
}
private void btnStart_Click(object sender, RoutedEventArgs e)
{
cmbStatus.IsEnabled = true;
btnLand.IsEnabled = true;
btnStart.IsEnabled = false;
try
{
TakeOffEvent(this, new TakeOffEventArgs("{0}", "{1}", DateTime.Now.ToString()));
}
catch { MessageBox.Show("lern 2 progrm"); }
// MainWindow main = new MainWindow();
// main.lvFlights.Items.Add(this.Title + " sent to runway" + " 1 minute ago");
}
private void btnLand_Click(object sender, RoutedEventArgs e)
{
LandEvent(this, new LandEventArgs("aa", "bb", "cc"));
}
public void cmbStatus_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
string route;
switch (cmbStatus.SelectedIndex)
{
case 0: route = "10 deg"; ChangeEvent(this, new ChangeRouteEventArgs("aa", "bb", "cc"));
break;
case 1: route = "30 deg"; ChangeEvent(this, new ChangeRouteEventArgs("aa", "bb", "cc"));
break;
case 2: route = "60 deg"; ChangeEvent(this, new ChangeRouteEventArgs("aa", "bb", "cc"));
break;
case 3: route = "90 deg"; ChangeEvent(this, new ChangeRouteEventArgs("aa", "bb", "cc"));
break;
}
}
}
}
Изменить класс маршрута, вот где у меня возникают проблемы с получением выбранного элементаиз выпадающего списка и попадания в список
namespace Assignment_3
{
public class ChangeRouteEventArgs
{
public string FlightCode;
public string Status;
public string Time;
Flight flight =new Flight();
public ChangeRouteEventArgs(string FlightCode, string Satus, string Time)
{
// TODO: Complete member initialization
switch (flight.cmbStatus.SelectedIndex)
{
case 0: this.Status = " now heading "+"10 deg";
break;
case 1: this.Status = " now heading " + "30 deg";
break;
case 2: this.Status = " now heading " + "60 deg";
break;
case 3: this.Status = " now heading " + "90 deg";
break;
}
this.FlightCode = "dis reelee werkt";
this.Status = " now heading " + flight;
this.Time = " "+DateTime.Now.Minute.ToString();
}
}
}
Буду крайне признателен за вашу помощь!=)
Редактировать:
Ну, я полагаю, вы хотите, чтобы я показал вам мои коды xaml?
<Window x:Class="Assignment_3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Control Tower" Height="276" Width="407" ResizeMode="NoResize" ShowInTaskbar="True" WindowStyle="ThreeDBorderWindow">
<Grid>
<ListView Height="170" HorizontalAlignment="Left" Margin="12,12,0,0" Name="lvFlights" VerticalAlignment="Top" Width="373">
<ListView.View>
<GridView>
<GridViewColumn Header="Flight Code" Width="90" DisplayMemberBinding="{Binding FlightCode}"/>
<GridViewColumn Header="Status" Width="160" DisplayMemberBinding="{Binding Status}"/>
<GridViewColumn Header="Time" Width="120" DisplayMemberBinding="{Binding Time}"/>
</GridView>
</ListView.View>
</ListView>
<Label Content="Next Flight" Height="28" HorizontalAlignment="Left" Margin="12,197,0,0" Name="label1" VerticalAlignment="Top" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="86,200,0,0" Name="txtFlightCode" VerticalAlignment="Top" Width="88" Text="flight code" />
<Button Content="Send Next Airplane to Runaway" Height="23" HorizontalAlignment="Right" Margin="0,199,12,0" Name="btnSend" VerticalAlignment="Top" Width="188" Click="button1_Click" />
</Grid>
</Window>
Flight xaml
<Window x:Class="Assignment_3.Flight"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Flight" Height="244" Width="277" ResizeMode="NoResize" WindowStyle="ToolWindow">
<Grid>
<Image Height="159" HorizontalAlignment="Left" Margin="12,12,0,0" Name="image1" Stretch="Fill" VerticalAlignment="Top" Width="231" Source="file:///C:/Users/Hans/Documents/Visual%20Studio%202010/Projects/Assignment%203/Assignment%203/Resources/airplane2.jpg" />
<Button Content="Start" Height="23" HorizontalAlignment="Left" Margin="12,177,0,0" Name="btnStart" VerticalAlignment="Top" Width="60" Click="btnStart_Click" />
<Button Content="Land" Height="23" HorizontalAlignment="Right" Margin="0,177,12,0" Name="btnLand" VerticalAlignment="Top" Width="60" Click="btnLand_Click" />
<ComboBox Height="23" HorizontalAlignment="Left" Margin="78,177,0,0" Name="cmbStatus" VerticalAlignment="Top" Width="99" SelectedIndex="-1" SelectionChanged="cmbStatus_SelectionChanged" SelectedItem="{Binding Item}">
<ComboBoxItem Content="10 deg" />
<ComboBoxItem Content="30 deg" />
<ComboBoxItem Content="60 deg" />
<ComboBoxItem Content="90 deg" />
</ComboBox>
</Grid>
</Window>
Так что мне теперь делать?= / Я плохо в этом.