Попытка наследовать MainWindow в подкласс, но получить системный стекопоток - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь отправить дополнительные переменные в обработчик событий WPF.

Я попытался с помощью делегата отправить его другой функции, которая содержит переменную, которая мне нужна, и она работает. Тем не менее, он создает копию переменной, и я не могу изменить значение в главном классе из функции делегата. Затем я подумал о перемещении функции в класс и сохранении всех переменных в классе, чтобы они могли получить и установить. Однако, поскольку он является классом и не наследует основной класс, объекты WPF / XAML не могут быть найдены. Я пытался унаследовать основной класс, но поскольку я создаю класс внутри основного класса и он эффективно наследует себя, он попадает в цикл, от которого не может выйти.

public partial class MainWindow : Window
{

    public class Program : MainWindow
    {
        public string Word { get; set; }

        public void WhenPressed_1(object sender, RoutedEventArgs e)
        {
            lable_1.Content = Word;
        }
    }
    public MainWindow()
    {            
        InitializeComponent();

        Program test = new Program();
        Button_1.Click += delegate (object sender, RoutedEventArgs e) { test.WhenPressed_1(sender, e); };
    }       
}

Он находится в строке Program test = new Program (); это ломает.

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

Спасибо (извините за этот многословный вопрос)

1 Ответ

1 голос
/ 26 апреля 2019

Вы можете передать объект MainWindow в класс программы и изменить желаемое значение

   public partial class MainWindow : Window, ICommon
{

    public MainWindow()
    {
        InitializeComponent();
        Program test = new Program();
        thisButton.Click += delegate(object sender, RoutedEventArgs e) { test.WhenPressed_1(this); };
    }

    public void SetValueInMain()
    {
        // Set Main values
    }

    public class Program
    {
        public string Word { get; set; }
        public void WhenPressed_1(ICommon mainWind)
        {
            mainWind.SetValueInMain();
        }
    }
}

public interface ICommon
{
    void SetValueInMain();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...