Инициализировать глобальную переменную в команде и использовать ее в другой команде

#c# #wpf #mvvm #command #viewmodel

#c# #wpf #mvvm #команда #viewmodel

Вопрос:

Моя ViewModel содержит переменную, которая инициализирована в команде, и я хочу использовать ее в другой команде. Есть 2 окна: первое окно содержит кнопку, которая запускает первую команду и открывает второе окно. Второе окно содержит кнопку, которая запускает вторую команду. Для этой второй команды требуется переменная, инициализированная первой командой. Обе команды реализованы в моей ViewModel.

Проблема: Когда открывается второе окно, переменная, которая была инициализирована первой командой, потеряла свое значение (пустая строка), и я не понимаю, почему.

Как я могу это реализовать?

Комментарии:

1. Что вы подразумеваете под «Командой»?

2. В C # нет глобальных переменных. Однако вы могли бы использовать свойство члена класса или static свойство. Не могу сказать вам, что было бы лучше, не зная некоторой базовой информации о вашем коде. Находятся ли команды в разных классах?

3. «переменная, которая была инициализирована первой командой, потеряла свое значение (пустая строка), и я не понимаю почему». — аааа, итак, вы просите нас рассказать вам, что там делает ваш код. Даже не увидев ее. Позвольте мне посмотреть, есть ли в nuget пакеты «Карта Таро» и «Чтение мыслей»…

4. Хорошо, итак, я не уверен в том, как решить проблему с вашим кодом, но не отправляйтесь в какие-либо длительные путешествия при полной луне. Приветствия!

5. что такое static?

Ответ №1:

Вот мой код (из моего класса ViewModel):

 // TextForThisWindow is a global variable declared in this class.

...

void firstCommandExecute()
    {
        TextForThisWindow = "Text";
        System.Windows.Application.Current.MainWindow.Hide();
        secondWindow sw = new secondWindow(Text);
        sw .WindowStartupLocation = WindowStartupLocation.CenterScreen;
        sw .Show();
    }

    bool CanfirstCommandExecute()
    {
        return true;
    }


    public ICommand firstCommand{ get { return new RelayCommand(firstCommandExecute, CanfirstCommandExecute); } }


    void secondCommandExecute()
    {
        Info = "info";

        if (TextForThisWindow.Contains("X"))
        {
            Selected = "X";
        }

        PathOfSelectedInfo = img.getPathOfSelectedInfo(ImagePathM1, Info);
        path = PathOfSelectedInfo;
        thirdWindow tw= new thirdWindow("Text"   Selected);
       tw.WindowStartupLocation = WindowStartupLocation.CenterScreen;
       tw.Show();
    }

    CanthirdWindowExecute()
    {
        return true;
    }


    public ICommand secondCommand{ get { return new RelayCommand(secondCommandExecute, CansecondCommandbExecute); } }