2015-10-28 4 views
3

На моей странице входа есть метка, при неудачной аутентификации я покажу сообщение об ошибке. Когда я рисую его, я установил значение «Видимость» равным false. После проверки подлинности я хочу вернуться к ContentPage и установить ярлык на видимый. Он просто ничего не делать, я попытался установить BindingMode перечисление в TwoWay но позволяет ему сразу, а потом я не могу выключить егоXamarin forms binding Label IsVisibleProperty

в LoginPage

Label errorMessage = new Label { IsVisible = false, Text = "Invalid credentials please try again", TextColor = Color.Red }; 
errorMessage.SetBinding(IsVisibleProperty, LoginViewModel.ErrorMessagePropertyName); 

На странице ViewModel

public const string ErrorMessagePropertyName = "DisplayError"; 
private bool _displayError = false; 
private bool DisplayError 
{ 
    get { return _displayError; } 
    set 
    { 
     if (value.Equals(_displayError)) return; 

     _displayError = value; 
     OnPropertyChanged(); 
    } 
} 

Моя кнопка связана с этим в том же вид модели класса, как указано выше, если он doens't пройти простую аутентификацию он пытается установить свойство DisplayError

protected async Task ExecuteLoginCommand() 
{ 
    string eventMessage= string.Format("Authenticating User:{0} on {1}", UserName, DateTime.UtcNow); 
    Logger.LogEvent(eventMessage); 

    if(UserName == "g" && Password.Length > 2) 
    { 
     Application.Current.Properties.Add(Constants.KEY_IS_AUTHENTICATED, true); 

     await _navigation.PopAsync(); 
    } 
    else 
    { 
     DisplayError = true; 
     string message = string.Format("Invalid user tried to log into device at this time {0}",DateTime.Now); 
     Logger.LogEvent(message); 
    } 

    Debug.WriteLine(UserName); 
    Debug.WriteLine(Password); 
} 

OnPropertyChanged метод

protected virtual void OnPropertyChanged([CallerMemberName]string propertyName = null) 
{ 
    if (PropertyChanged != null) 
    { 
     PropertyChanged(this, 
      new PropertyChangedEventArgs(propertyName)); 
    } 
} 
+0

Что ваш 'OnPropertyChanged' выглядеть? и правильно ли вы устанавливаете свой «BindingContext»? – Johan

+0

Почему вы привязываете свойство boolean IsVisible к строке ErrorMessagePropertyName? –

+0

Это имя 'DisplayError', сохраненное в константе. Это нормально. Хотя это выглядит странно с первого взгляда. – Wosi

ответ

2

Сделать свойство DisplayError общественности, так что становится видимым для других классов. Когда она по-прежнему не работает изменить связывание:

errorMessage.SetBinding(Label.IsVisibleProperty, LoginViewModel.ErrorMessagePropertyName); 
+0

Глупым ошибкой было то, что свойство ошибки Dispaly было закрыто, что вызывало проблему. – InitLipton