Запустить событие программно и передать значение на вторую страницу? - PullRequest
0 голосов
/ 23 октября 2019

Я хочу передать значение с главной страницы на страницу 2. Когда я нажимаю Button_Click, переменная «t» передается в Page2.

Однако мне нужно вызвать событие Button_Click из кода, но затем выдается «NullReferenceException».

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        Button_Click(new object(), new RoutedEventArgs());
    }

    public void Button_Click(object sender, RoutedEventArgs e)
    {
        string t = "Test";
        navigate_page2(t);
    }

    public void navigate_page2(string t)
    {
        this.Frame.Navigate(typeof(Page2), t);
    }
}

Button_Click(new object(), new RoutedEventArgs()); запускает событие Button_Click для выполнения каких-либо действий, за исключением случаев, когда вызывается "navigate_page2".

В чем разница между прямым нажатием и активацией кнопки из кода? Я полагаю, что это "новые RoutedEventArgs", но я не знаю, как с этим справиться ... Спасибо за любой ответ!

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Пожалуйста, не вызывайте Button_Click напрямую, этот метод связан с событиями в XAML.

Если вы хотите повторно использовать код в событии Button_Click, вы можете упаковать его как метод для вызова.

Обновление

но затем выдается «NullReferenceException».

Проблема в this.Frame. для вашей текущей страницы this.Frame не существует. Вам нужно создать подкадр в xaml.

<Grid>
    <Frame x:Name="MainFrame"/>
</Grid>
public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        btn_handle();
    }

    public void Button_Click(object sender, RoutedEventArgs e)
    {
        btn_handle();
    }

    public void btn_handle()
    {
        string t = "Test";
        navigate_page2(t);
    }

    public void navigate_page2(string t)
    {
        MainFrame.Navigate(typeof(Page2), t);
    }
}

С уважением.

0 голосов
/ 23 октября 2019

Насколько я понимаю, вы пытаетесь передать значение с одной страницы на другую, давайте возьмем пример для двух форм, которые вам нужно передать одно значение из формы в другую с помощью триггера любого нажатия кнопки.

Form2

public partial class Form2 : Form
{
    public event EventHandler TextEvent;

    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.Hide();
        if (TextEvent != null)
        {
            TextEvent(label1.Text, null);
        }
    }
}

Form1

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 obj = new Form2();
        obj.Show();
        obj.TextEvent += obj_TextEvent;
    }

    void obj_TextEvent(object sender, EventArgs e)
    {
        label1.Text = sender.ToString();
    }
}

Вот что я делаю: я создал событие в Form2, которое срабатывает при нажатии кнопки Button1 в Form2, и данные передаются в качестве отправителя. в Form1, где Form2 obj инициировал событие и установил label1 для Form1 как label1.Text = sender.ToString ();

...