Я не понимаю, зачем вам два окна, поэтому я предполагаю, что вы можете обойтись одним окном. Вы этого не говорите, но я предполагаю, что пользователь будет вводить название фильма, номер места и идентификатор строки в текстовые поля в окне.
Чтобы ответить на ваш первый вопрос, все, что вам нужно сделать, чтобы связать список с DataGrid
, - это присвоить список свойству DataGrid
ItemsSource
. Например (см. Метод MainWindow
ниже):
dataGridReservations.ItemsSource = reservations.List;
Я новичок в WPF, но похоже, что поведение по умолчанию для DataGrid
заключается в создании имен столбцов из имен переменных в списке.
Вы хотите реализовать свой список резервирований как ObservableCollection
, поскольку ObservableCollection
автоматически распространяет изменения в сетке данных при добавлении, удалении или изменении элемента в связанном списке. См. Как связать список с сеткой данных WPF?
По второму вопросу: используйте событие нажатия кнопки Add
, чтобы добавить название фильма, номер места и идентификатор строки из текстовых полей к новому элементу в списке. Опять же, когда список обновляется, DataGrid
обновляется из-за действия ObservableCollection
Вот код, который позволяет пользователю ввести название фильма, номер места и идентификатор строки, а затем нажать кнопку «Добавить», чтобы добавить его к DataGrid
. Требуется больше кода, чтобы пользователь мог редактировать или удалять элемент в сетке.
XAML следует коду
См. Снимок экрана внизу для демонстрации
public partial class MainWindow : Window
{
Reservations reservations;
public MainWindow()
{
InitializeComponent();
reservations = new Reservations();
dataGridReservations.ItemsSource = reservations.List;
}
public class Reservations
{
public class Reservation
{
private string _movieName;
private string _seat;
private string _rowID;
public Reservation(string movieName, string seat, string rowID)
{
MovieName = movieName;
Seat = seat;
RowID = rowID;
}
public string MovieName { get => _movieName; set => _movieName = value; }
public string Seat { get => _seat; set => _seat = value; }
public string RowID { get => _rowID; set => _rowID = value; }
}
private ObservableCollection<Reservation> _list;
public ObservableCollection<Reservation> List { get => _list; set => _list = value; }
public Reservations()
{
List = new ObservableCollection<Reservation>();
}
public void AddReservationToList(string MovieName, string SeatNumber, string RowId)
{
Reservation reservation = new Reservation(MovieName, SeatNumber, RowId);
List.Add(reservation);
}
}
private void ButtonAddReservationToList(object sender, RoutedEventArgs e)
{
reservations.AddReservationToList(textBoxMovieName.Text, textBoxSeatNumber.Text, textBoxRowId.Text);
textBoxMovieName.Text = "";
textBoxSeatNumber.Text = "";
textBoxRowId.Text = "";
}
}
MainWindow XAML
<Window x:Class="SO_Refresh_datagrid.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:SO_Refresh_datagrid"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Content="Add" HorizontalAlignment="Left" Height="30" Margin="83,169,0,0" VerticalAlignment="Top" Width="64" Click="ButtonAddReservationToList"/>
<TextBox x:Name="textBoxMovieName" HorizontalAlignment="Left" Height="31" Margin="140,18,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="103"/>
<TextBox x:Name="textBoxSeatNumber" HorizontalAlignment="Left" Height="24" Margin="140,61,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="103"/>
<TextBox x:Name="textBoxRowId" HorizontalAlignment="Left" Height="24" Margin="140,100,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="103"/>
<Label Content="Movie Name" HorizontalAlignment="Left" Height="31" Margin="36,18,0,0" VerticalAlignment="Top" Width="71"/>
<Label Content="Seat Number" HorizontalAlignment="Left" Height="31" Margin="36,61,0,0" VerticalAlignment="Top" Width="90"/>
<Label Content="Row Id" HorizontalAlignment="Left" Height="31" Margin="36,100,0,0" VerticalAlignment="Top" Width="71"/>
<DataGrid x:Name="dataGridReservations" HorizontalAlignment="Left" Height="284" Margin="277,18,0,0" VerticalAlignment="Top" Width="209"/>
</Grid>
</Window>
Демо
