MvvmCross没有创建绑定

时间:2016-04-19 20:04:42

标签: xamarin xamarin.ios mvvmcross

我刚刚将一个项目从旧版本的MvvmCross升级到最新版本,我遇到了绑定问题。

我知道LinkerPleaseInclude hack,看起来(至少有些)我正在使用的属性列在那里。

我担心我对Views和ViewModel的使用。这是一个例子。

public partial class HomeView : MvxViewController<HomeViewModel>

...

public override void ViewDidLoad ()
{
    base.ViewDidLoad();

    this.CreateBinding(BudgetTrackerButton).To((HomeViewModel vm) => vm.BudgetTracker).Apply();
    this.CreateBinding(LoginButton).For("Title").To ((HomeViewModel vm) => vm.LogMessage).Apply();
    this.CreateBinding(LoginButton).To((HomeViewModel vm) => vm.Login).Apply();
    this.CreateBinding(ContactApprisenButton).To((HomeViewModel vm) => vm.Contact).Apply();
    this.CreateBinding(AboutApprisenButton).To((HomeViewModel vm) => vm.About).Apply();
    this.CreateBinding(AboutThisAppButton).To((HomeViewModel vm) => vm.AboutApp).Apply();
    this.CreateBinding(FAQsButton).To((HomeViewModel vm) => vm.FAQs).Apply();
    this.CreateBinding(PrivacyPolicyButton).To((HomeViewModel vm) => vm.PrivacyPolicy).Apply();
}

public abstract class MvxViewController<T> : UIViewController, IMvxBindingContextOwner, IUIWrappable, MvvmCross.iOS.Views.IMvxIosView where T : ViewModelBase

...

}

protected MvvmCross.Core.ViewModels.IMvxViewModel _viewModel = null;
public MvvmCross.Core.ViewModels.IMvxViewModel ViewModel {
    get {
        if (_viewModel == null) {
            _viewModel = MvvmCross.Platform.Mvx.Resolve<T> ();
        }

        return _viewModel;
    }
    set {
        _viewModel = value;
    }
}

public MvvmCross.Core.ViewModels.MvxViewModelRequest Request {
    get;
    set;
}

public object DataContext {
    get {
        return _viewModel;
    }
    set {
        _viewModel = (MvvmCross.Core.ViewModels.IMvxViewModel)value;
    }
}

protected MvvmCross.Binding.BindingContext.IMvxBindingContext _bindingContext;
public IMvxBindingContext BindingContext {
    get {
        if (_bindingContext == null) {
            _bindingContext = new MvvmCross.Binding.BindingContext.MvxBindingContext ();
        }
        return _bindingContext;
    }
    set {
        _bindingContext = value;
    }
}

CreateBinding来自MvxBindingContextOwnerExtensions。

当我点击CreateBinding时,视图模型已经完成。

我理解DataContext与ViewModel相同,我只包含它以符合MvvmCross.iOS.Views.IMvxIosView接口。

我错过了某个地方的一步吗?界面?

视图模型的匹配视图应根据命名约定自动进行,对吧? (他们没有..在我的情况下,我不得不手动指定我的安装程序类中的映射。可能导致这个问题。)

奇怪的是,这个工作(对于按钮标题,无论如何,我还没有测试过其他绑定,如果解决方法是修复,我对整个应用程序中的所有绑定都不感兴趣简单):

var set = this.CreateBindingSet<HomeView, HomeViewModel>();
set.Bind(LoginButton).For("Title").To(vm => vm.LogMessage);

如果其他内容相关,我可以发布更多代码。我也是MvvmCross的新手。

0 个答案:

没有答案