Xamarin控件不尊重是可见的属性

时间:2018-09-26 18:01:28

标签: c# xaml xamarin model-view-controller

所以我有一个可观察的按钮集合,我试图将IsVisible绑定到其中一个按钮,即使我将IsVisible硬编码为false时,按钮也会显示。

查看:

<c:MobileFocusBasePage.BottomRegionItems>
    <c:CollapsableButtonList ItemsSource="{Binding ActionItems}" HorizontalOptions="CenterAndExpand" WidthRequest="-1"/>
</c:MobileFocusBasePage.BottomRegionItems>

型号:

public ObservableCollection<View> ActionItems { get; set; } = new ObservableCollection<View>();

ActionItems.Add(new PaddedButton { BindingContext = NewWorkOrderButton, Text = ResString("Portal-WorkOrder"), Style = s, IsVisible = false});

在这种情况下,是否有理由忽略IsVisible?

在此先感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我个人更喜欢使用字段来支持Public属性。

private private ObservableCollection<View> _actionItems;

public ObservableCollection<View> ActionItems 
{
    get
    {
        return this._actionItems;
    }
    set
    {
        this._actionItems = value;        
    }
}

ObservableCollection在添加/删除/移动集合中的对象时向UI提供更改通知。有关更多信息,请参见post

您最有可能遇到的问题是,您的模型没有更改通知。因此,当在视图模型中更新IsVisibile属性时,视图如何知道它已更改?通知视图的通用方法是使用INotifyPropertyChanged接口。

我不知道您的视图类的具体实现,但这是一个示例。

public  class View : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string PropertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(PropertyName));
    }

    private bool _isVisible;
    public bool IsVisible
    {
        get
        {
            return this._isVisible;
        }
        set
        {
            this._isVisible = value;
            this.OnPropertyChanged(IsVisible) <--- The Magic! 
        }
    }
}

您必须在xaml中绑定IsVisible属性,并且每当更新此属性时,视图都会随之变化!

INotifyPropertyChanged接口被广泛使用,下面的代码90%是样板内容。您可以将其放在基类中,也可以使用提供此功能的MVVM框架。如果您想了解有关如何实现INotifyPropertyChanged接口的更多信息,请参见post