Xamarin 形成绑定标签 IsVisibleProperty
Posted
技术标签:
【中文标题】Xamarin 形成绑定标签 IsVisibleProperty【英文标题】:Xamarin forms binding Label IsVisibleProperty 【发布时间】:2016-01-28 13:12:32 【问题描述】:我的登录页面有一个标签,当身份验证失败时,我会显示一条错误消息。当我绘制它时,我已将 Visibility 设置为 false。在我进行身份验证后,我想回到 ContentPage 并将标签设置为可见。它只是没有做任何事情我尝试将 BindingMode 枚举设置为 TwoWay 但这会立即启用它然后我无法将其关闭
在登录页面中
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();
我的按钮在与上面相同的视图模型类中绑定到这个,如果它没有通过简单的身份验证,它会尝试设置属性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));
【问题讨论】:
您的OnPropertyChanged
是什么样的?您是否正确设置了BindingContext
?
为什么要将布尔 IsVisible 属性绑定到字符串 ErrorMessagePropertyName?
是DisplayError
的名字,保存在一个常量中。可以这样做。尽管第一眼看起来很奇怪。
【参考方案1】:
将属性 DisplayError
设为公共,以便其他类可以看到它。
当它仍然不起作用时,将绑定更改为:
errorMessage.SetBinding(Label.IsVisibleProperty, LoginViewModel.ErrorMessagePropertyName);
【讨论】:
愚蠢的错误是导致问题的私有显示错误属性。以上是关于Xamarin 形成绑定标签 IsVisibleProperty的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin 形成 MVVM Stacklayout 内容绑定
xamarin 形成 xaml OnPlatform 无法处理绑定
Xamarin为标题形成ControlTemplate,为页脚和绑定形成另一个