【问题标题】:Button not disabled on page load in Xamarin.Forms在 Xamarin.Forms 中的页面加载时未禁用按钮
【发布时间】:2019-03-08 07:17:20
【问题描述】:

我的页面中有一个按钮。我想在页面加载时禁用这个按钮,但它没有被禁用。

XAML:

 <Button IsEnabled="{Binding IsEnabledSaveBtn,Mode=TwoWay}" Text="Save" Command="{Binding SaveItem}" />

视图模型:

bool _isEnabledSaveBtn = false;
        public bool IsEnabledSaveBtn
        {
            get { return _isEnabledSaveBtn; }
            set
            {
                _isEnabledSaveBtn = value;
                OnPropertyChanged();
            }
        }

ViewModel 构造函数内部:

public CreateDiscountViewModel(INavigation navigation)
        {
            Navigation = navigation;
            IsEnabledSaveBtn=False;
        }

我也在验证 TextChange 事件的数据,它工作正常。但我想在页面加载时禁用此按钮。

我该如何解决这个问题?

【问题讨论】:

  • 问题出在哪里?您可能正在使用一些您没有指定的 MVVM 框架,我们只能猜测,但如果它在您调用 IsEnabledSaveBtn=False 时处理 PropertyChanged;它会禁用按钮...
  • 您是否将您的BindingContext 设置为您的CreateDiscountViewModel

标签: xamarin xamarin.forms


【解决方案1】:

您需要进行以下更改:

在您的 XAML 中,您不需要双向绑定:

<Button IsEnabled="{Binding IsEnabledSaveBtn}" Text="Save" Command="{Binding SaveItem}" />

您的属性应如下所示:

    private bool _isEnabledSaveBtn;
    public bool IsEnabledSaveBtn
    {
        get { return _isEnabledSaveBtn; }
        set
        {
            _isEnabledSaveBtn = value;
            OnPropertyChanged(nameof(IsEnabledSaveBtn));
        }
    }

并在您的 ViewModel 构造函数中设置值:

public CreateDiscountViewModel(INavigation navigation)
    {
        Navigation = navigation;
        IsEnabledSaveBtn = false;
    }

【讨论】:

  • 这个按钮是在列表视图中还是在任何类型的数据模板中?
  • 没有这个按钮不在列表视图中。在文本更改事件上它工作正常。但在页面加载它不工作
【解决方案2】:

您的OnPropertyChanged 事件似乎有问题。

试试下面的,它会起作用的。

按钮已启用:

bool _isEnabledSaveBtn = false;
    public bool IsEnabledSaveBtn
    {
        get { return _isEnabledSaveBtn; }
        set
        {
            _isEnabledSaveBtn = value;
            OnPropertyChanged("IsEnabledSaveBtn");
        }
    }

OnPropertyChanged

 public event PropertyChangedEventHandler PropertyChanged;
            protected void OnPropertyChanged(string propertyName)
            {
                var handler = PropertyChanged;
                if (handler != null)
                    handler(this, new PropertyChangedEventArgs(propertyName));
            }

在你的构造器中

IsEnabledSaveBtn = false;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 2021-12-23
    • 2017-01-12
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多