【发布时间】:2014-01-17 10:11:24
【问题描述】:
我正在使用 MvvmCross 和 SherlockActionBar。我的问题是我需要根据某些 ViewModel 属性的值使 SherlockActionBar 中的项目消失。
actionBar 中的项目具有属性 IsVisible 但不幸的是它没有设置器(您需要通过 item.SetVisible(boolValue) 设置可见性)所以我决定在 View.cs 中创建自己的属性 ItemVisible (将其绑定到ViewModel-property),它将更改调用 item.SetVisible。
我已经搜索了如何在代码绑定和found this 中进行操作。
所以我将 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);
}}
【问题讨论】:
标签: mvvmcross