所以我有一个可观察的按钮集合,我试图将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?
在此先感谢您的帮助
答案 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。