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,为页脚和绑定形成另一个

Xamarin Forms 将属性绑定到标签的文本

如何使用 c# 将单个 html 行绑定到 xamarin.forms 中的多个标签

如何在一个 Xamarin 表单标签中有 2 个数据绑定字段?