C # Передача данных между окнами (WPF) - PullRequest
0 голосов
/ 01 октября 2018

Недавно поднял C # в университете, пытаясь понять, как передать переменную "name" в MainWindow.xaml в ThirdWindow.xaml?

Приведенный ниже код предназначен для главного окна, гдеданные присваиваются переменной "имя"

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();    
    }

    public void NameBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        string name = NameBox.Text;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        SecondWindow newWin = new SecondWindow();
        newWin.Show();
        this.Close();
    }
}

Приведенный ниже код предназначен для третьего окна

public partial class ThirdWindow : Window
{
    public ThirdWindow()
    {
        InitializeComponent();      
    }

    public void LstThanks_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        LstThanks.Items.Add(name);
    }
}

Ответы [ 4 ]

0 голосов
/ 01 октября 2018

Если окно ThirdWindow зависит от значения name, вы можете передать его через конструктор:

public partial class ThirdWindow : Window
{
    public string Name { get; set; }

    public ThirdWindow(string name)
    {
        InitializeComponent();   
        Name = name;
    }
}

или, если нет, создать метод на ThridWindow, чтобы установитьname:

public partial class ThirdWindow : Window
{
    public string Name { get; set; }

    public void SetName(string name)
    {  
        Name = name;
    }
}
0 голосов
/ 01 октября 2018

Вы можете передать переменную через конструктор нового окна

var win = new ThirdWindow(name);

public ThirdWindow(string name)
{
    InitializeComponent();      
}

Другой способ - передать ее через сообщение о событии.Это потребует от вас написать новое сообщение и добавить прослушиватель событий в ваш конструктор в классе ThirdWindow.Если вы гуглите это, есть множество примеров того, как это сделать.

0 голосов
/ 01 октября 2018

Здесь вы определяете локальную переменную имя.Эта переменная видна только внутри блока {}.Таким образом, мы не можем использовать его где-либо еще.

public void NameBox_TextChanged(object sender, TextChangedEventArgs e)
{
    string name = NameBox.Text;
}

Вы можете добавить новое строковое свойство во второе окно и передать значение через него во всю третью форму.

Итак, добавьте новоесвойство в ваших двух окнах (SecondWindow, ThirdWindow)

public string Name { get; set; }

Эти свойства хранят данные в течение всего времени их существования (до тех пор, пока они не будут закрыты).

Удаление обработки событий NameBox_TextChanged, потому что мы неэто не нужноДобавьте параметр свойства в событие нажатия кнопок

private void Button_Click(object sender, RoutedEventArgs e)
{
    SecondWindow newWin = new SecondWindow();
    newWin.Name = NameBox.Text; //Store value into SecondWindow variable
    newWin.Show();
    this.Close();
}

Теперь, когда SecondWindow является видимым (вызывается Show), у вас есть доступное значение имени в переменной Name, и вы должны иметь возможность скопировать это поведение для ThirdWindow.

0 голосов
/ 01 октября 2018

Вы можете просто передать эту переменную имени строки в конструкторе в качестве аргумента события ThirdWindow при Button_Click .

   private void Button_Click(object sender, RoutedEventArgs e)
    {
        var name = "your name";
        var newWin = new ThirdWindow(name);
        newWin.Show();
        this.Close();
    }

Этот текст строки будетдоступно в конструкторе ThirdWindow .

public partial class ThirdWindow: Window
{
    public ThirdWindow(string name)
    {
        InitializeComponent();      
    }

    public void LstThanks_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        LstThanks.Items.Add(name);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...