передача информации из окна в окно с помощью wpf - PullRequest
0 голосов
/ 14 марта 2020

Программа должна иметь главное окно и второе окно, в котором главное окно содержит сетку данных. Тем не менее, я не могу найти способ передать данные из окна клиента в сетку данных в главном окне, и нам не разрешено использовать любую форму базы данных в этой программе.

здесь код для основного окна

 public partial class MainWindow : Window
{
    List<string> intlist = new List<string>();
    public MainWindow()
    {
        InitializeComponent();
    }
    public MainWindow(List<string> intlist)
    {
        InitializeComponent();
        this.intlist = intlist;
        foreach (string x in intlist)
        {
            lstView.Items.Add(x);
        }
    }

    private void Add_Click(object sender, RoutedEventArgs e)
    {
        this.Hide();
        Client x = new Client();
        x.Show();
    }

и код для окна клиента здесь

public partial class Client : Window
{
    List<string> intlist = new List<string>();
    public Client()
    {
        InitializeComponent();
    }
    public Client(List<string> intlist)
    {
        InitializeComponent();
        this.intlist = intlist;
    }

    private void save_Click(object sender, RoutedEventArgs e)
    {
        this.intlist.Add(NameTB.Text);
        MainWindow x = new MainWindow();
        x.Show();
        this.Close();
    }
}

, и это мой xaml для основного окна

    <Grid>
    <ListView x:Name="lstView" HorizontalAlignment="Left" Height="209" Margin="86,37,0,0" VerticalAlignment="Top" Width="635">
        <ListView.View>
            <GridView>

                <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}"/>
            </GridView>
        </ListView.View>
    </ListView>
    <Button x:Name="Add" Content="Add" HorizontalAlignment="Left" Height="37" Margin="86,304,0,0" VerticalAlignment="Top" Width="135" Click="Add_Click"/>

</Grid>

и мой xaml для окна клиента

<Window x:Class="Proj_example.Client"
    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:Proj_example"
    mc:Ignorable="d"
    Title="Client" Height="450" Width="800">
<Grid>
    <TextBox x:Name="NameTB" HorizontalAlignment="Left" Height="66" Margin="117,90,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="566"/>
    <Button x:Name="save" Content="Save" HorizontalAlignment="Left" Height="66" Margin="117,232,0,0" VerticalAlignment="Top" Width="194" Click="save_Click"/>

</Grid>

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

1). Вы на самом деле не отправляете свой список в диалог клиента

private void Add_Click(object sender, RoutedEventArgs e)
{
    this.Hide();
    //Client x = new Client();
    //You need to provide the list
    Client x = new Client(intlist);
    x.Show();
}

public Client(List<string> intlist)
{
    InitializeComponent();
    this.intlist = intlist;
}

2). Вы создаете новое главное окно вместо того, чтобы открывать уже существующее. Вы можете передать ссылку на ваше первое окно и просто вызвать show (), или, что еще лучше, научиться использовать события и сделать так, чтобы ваш клиент вызывал OnSaveEvent, на который подписывается MainWindow, который может обрабатывать сохранение записи, закрытие клиента и отображение себя.

private void save_Click(object sender, RoutedEventArgs e)
{
    this.intlist.Add(NameTB.Text);
    //this is a new instance of main window with it's very own list.
    MainWindow x = new MainWindow();
    x.Show();
    this.Close();
}

3). И, наконец, если все это работает, вы на самом деле не говорите, что данные были обновлены. Для этого вам нужно будет реализовать INotifyPropertyChanged на MainWindow.

0 голосов
/ 14 марта 2020

Опция 1:

Затем вы можете просто использовать экземпляр MainWindow для доступа к MainWindow intList

Подобным образом (в save_Click Метод)

MainWindow x = new MainWindow();
x.intList.Add(NameTB.Text);

Вариант 2:

В главном окне есть конструктор, который принимает список в качестве параметра. Затем вы должны передать список конструктору как

Вот так (в методе save_Click)

this.intlist.Add(NameTB.Text);
MainWindow x = new MainWindow(intlist);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...