在我的应用程序中,我有一种情况,我想在页面上显示一些对象,然后将此对象更改为不同的对象。
所以,我们认为我有 MainPage.xaml.cs :
...
public Foo Item { get; set; }
public bool SomeCheck {
get {
return Item.Bar != "";
}
}
public MainPage() {
InitializeComponent();
SetItem();
BindingContext = this;
}
private void SetItem() {
Item = DifferentClass.GetNewItem();
}
private void Next_Clicked(object sender, EventArds e){
SetItem();
}
...
和 MainPage.xaml 是这样的:
...
<Label Text="{Binding Item.Bar}" IsVisible="{Binding SomeCheck}" />
<Button Text="Next" Clicked="Next_Clicked" />
...
所以我想将整个页面绑定到BindingContext,为实现这个目的,我设置了BindingContext = this;
。我想要的行为是显示Bar
返回的不同对象的GetNewItem()
属性,我得到的是冻结页面。在调试器中项目正在改变,但在页面上我总是重视我在第一次调用时设置的内容。
所以问题是:我可以以某种方式更新BindingContext
以显示我想要的内容吗?我试着打电话给OnPropertyChanged()
,但它对我不起作用。
我知道我可以像
一样设置整个对象BindingContext = { Bar = Item.Bar, SomeCheck = Item.Bar != "" };
它有效,但当然我的真实场景更复杂,所以我不想这样做。
答案 0 :(得分:1)
使用OnPropertyChanged
:
XAML:
<Label Text="IsVisible" IsVisible="{Binding MyIsVisible}" />
在viewmodel中,在MainPage.xaml.cs
中的情况下:
private bool myIsVisible = true;
public bool MyIsVisible
{
get => myIsVisible;
set
{
myIsVisible = value;
OnPropertyChanged(nameof(MyIsVisible));
}
}