У меня в главном окне есть панель стека под названием Panel.Свойство панели IsEnabled привязано к свойству IsLoggedIn в viewModel.Цель всего приложения - это приложение магазина.Пользователь должен открыть приложение и не входить в систему, затем он может нажать кнопку и ввести некоторую информацию для входа в систему, а затем нажать кнопку FinishLogin, при этом для IsLoggedIn будет установлено значение true.Когда это происходит, Panel, которая изначально была установлена IsEnabled = false, должна изменить IsEnabled = true для Panel, чтобы пользователь мог взаимодействовать с Panel.Такого не бывает.Пользователь может войти в систему, и при отладке я вижу, что IsLoggedIn изменяется на true, как и положено.Если я установлю IsEnabled = true в явном виде, как показано ниже в свойстве, то я также могу видеть, что IsEnabled становится истинным.Но когда пользователь нажимает кнопку для входа, панель не становится активной, как это должно быть.Код для панели приведен ниже:
<StackPanel Name="Panel" IsEnabled="{Binding IsLoggedIn}">
Это связано с:
public bool IsLoggedIn
{
get => this._isLoggedIn;
set
{
if (this._isLoggedIn != value)
{
this._isLoggedIn = value;
OnPropertyChanged("IsLoggedIn");
}
}
}
Когда IsLoggedIn меняется на true, я хочу, чтобы элемент IsEnabled панели становился true.INotifyPropertyChanged фиксирует изменение, потому что, когда я отлаживаю, оно не равно нулю, но когда IsLoggedIn становится истинным, в пользовательском интерфейсе ничего не меняется.Я попробовал это:
public bool IsLoggedIn
{
get => this._isLoggedIn;
set
{
if (this._isLoggedIn != value)
{
this._isLoggedIn = value;
OnPropertyChanged("IsLoggedIn");
if(this._isLoggedIn == true)
{
MainWindow mainWindow = new MainWindow();
mainWindow.Panel.IsEnabled = true;
OnPropertyChanged("IsLoggedIn");
}
}
}
}
У меня установлен такой текстовый текст данных:
<Window.DataContext>
<local:MainWindowViewModel/>
</Window.DataContext>
IsLoggedIn находится в классе MainWindowViewModel.
Здесь определен метод INotifyPropertyChanged:
public void OnPropertyChanged(string propertyName)
{
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
Команда button вызывает этот метод, который должен установить IsLoggedIn в значение true.Это ниже:
public void LoginChecks()
{
LoginPage loginPage = new LoginPage();
if ((usernameList.Contains(EnteredUsername) &&
passwordList.Contains(EnteredPassword)) &&
(usernameList.IndexOf(EnteredUsername) ==
(passwordList.IndexOf(EnteredPassword))))
{
IsLoggedIn = true;
CloseAction();
}
}
CloseAction является обычным {get;set;} свойство, определенное в viewModel.Это делает следующее в окне LoginPage.Он просто закрывает окно входа в систему.Этот код находится в коде окна LoginPage, потому что я не знал, как еще закрыть окно:
if(viewModel.CloseAction == null)
viewModel.CloseAction = new Action(this.Close);
Но это тоже не работает.Любая помощь будет принята с благодарностью.