#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); } }