我正在使用MvvmCross和SherlockActionBar。我的问题是,根据某些ViewModel属性的值,我需要使SherlockActionBar中的项目消失。
在actionBar中的项目有IsVisible属性,但不幸的是它没有setter(您需要通过item.SetVisible(boolValue)设置可见性),因此我决定在View.cs中创建自己的属性ItemVisible(将其绑定到ViewModel-property),当它改变时调用item.SetVisible。
我已经搜索了如何在代码绑定中执行此操作并找到了这个。
所以我将ItemVisible View属性绑定到ViewModelProperty,但它从未进入ItemVisible setter。当然,在ViewModelProperty可能更改后,我会在viewModel中引发RaiseAllPropertyChanged。我查看了mvvmcross bindings,但没有找到解决我的问题的答案。我做错了什么?
在actionBar中的项目有IsVisible属性,但不幸的是它没有setter(您需要通过item.SetVisible(boolValue)设置可见性),因此我决定在View.cs中创建自己的属性ItemVisible(将其绑定到ViewModel-property),当它改变时调用item.SetVisible。
我已经搜索了如何在代码绑定中执行此操作并找到了这个。
所以我将ItemVisible View属性绑定到ViewModelProperty,但它从未进入ItemVisible setter。当然,在ViewModelProperty可能更改后,我会在viewModel中引发RaiseAllPropertyChanged。我查看了mvvmcross bindings,但没有找到解决我的问题的答案。我做错了什么?
public class SomeView : BaseActionBarActivity {
private IMenuItem _item ;
private bool ItemVisible
{
get { return _item.IsVisible; }
set { _item.SetVisible(value); }
}
protected override void OnCreate(Bundle bundle)
{
SetTheme(Resource.Style.Theme_Sherlock);
base.OnCreate(bundle);
SetContentView(Resource.Layout.SomeView);
var set = this.CreateBindingSet<SomeView, SomeViewModel>();
set.Bind(this).For(p => p.ItemVisible).To(e => e.ViewModelProperty);
set.Apply();
}
public override bool OnCreateOptionsMenu(Xamarin.ActionbarSherlockBinding.Views.IMenu menu)
{
SupportMenuInflater.Inflate(Resource.Menu.SomeMenu, menu);
_item = menu.FindItem(Resource.Id.xmlMenuResource);
}}