是否可以将UIViewController的Title绑定到ViewModel字符串属性?它似乎永远不会更新.作为一个副作用,如果你没有在绑定之前将标题设置为某些东西,那么当set.Apply()被调用时,Mvvmcross代码中会出现崩溃.
UIViewController没有.xib,我不确定这是否是问题的一部分.
public override void ViewDidLoad()
{
base.ViewDidLoad();
var set = this.CreateBindingSet<HomeView, HomeViewModel>();
set.Bind(Title).To(vm => vm.ProjectName);
set.Apply();
}
Run Code Online (Sandbox Code Playgroud)
这是堆栈跟踪
2014-02-05 17:09:35.740 TerraFlex [9145:907] 02-05-2014 17:09:35:7403:1:[Info] HomeView加载线程开始:#12 2014-02-05 17:09: 36.219 TerraFlex [9145:907] 02-05-2014 17:09:36:2190:1:[致命]发生严重错误且申请已关闭2014-02-05 17:09:36.250 TerraFlex [9145:907] 02-05-2014 17:09:36:2497:1:[致命]日期:5/02/2014 5:09:36 PM,[例外]致命消息:对象引用未设置为对象的实例Stack: at Cirrious.MvvmCross.Bindings.Bindings.Target.Construction.MvxTargetBindingFactoryRegistry.TryCreateSpecificFactoryBinding(System.Object target,System.String targetName,IMvxTargetBinding&binding)[0x00001] in c:\ Projects\Misc\MVVMCROSS\Cirrious\Cirrious.MvvmCross.Binding\Bindings\Target\Construction\MvxTargetBindingFactoryRegistry.cs:69位于c:\ Projects\Misc \的Cirrious.MvvmCross.Bindings.Bindings.Target.Construction.MvxTargetBindingFactoryRegistry.CreateBinding(System.Object target,System.String targetName)[0x00001] MVVMCROSS\Cirrious\CIRR ious.MvvmCross.Binding\Bindings\Target\Construction\MvxTargetBindingFactoryRegistry.cs:22 at Cirrious.MvvmCross.Bindings.Mindings.MvxFullBinding.CreateTargetBinding(System.Object target)[0x00003] in c:\ Projects\Misc\MVVMCROSS\Cirrious\Cirrious.MvvmCross.Binding\Bindings\MvxFullBinding.cs:135 at Cirrious.MvvmCross.Bindings.Bindings.MvxFullBinding..ctor(Cirrious.MvvmCross.Binding.MvxBindingRequest bindingRequest)[0x00014] in c:\ Projects\Misc\MVVMCROSS\Cirrious\Cirrious.MvvmCross.Binding\Bindings\MvxFullBinding.cs:60 at Cirrious.MvvmCross.Binding.Binders.MvxFromTextBinder.BindSingle(Cirrious.MvvmCross.Binding.MvxBindingRequest bindingRequest)[0x00001] in c:\ Projects\Misc\MVVMCROSS\Cirrious\Cirrious.MvvmCross.Binding \粘合剂\ MvxFromTextBinder.cs:55在Cirrious.MvvmCross.Binding.Binders.MvxFromTextBinder + <> C_ DisplayClass1.b _0(Cirrious.MvvmCross.Binding.Bindings.MvxBindingDescription说明)[0x00000]在C:\项目\杂项\ MVVMCROSS\Cirrious\Cirrious.MvvmCross.Binding \装订\ MvxFr omTextBinder.cs:37 System.Linq.Enumerable + c__Iterator10
2[Cirrious.MvvmCross.Binding.Bindings.MvxBindingDescription,Cirrious.MvvmCross.Binding.Bindings.IMvxUpdateableBinding].MoveNext () [0x00000] in <filename unknown>:0 at Cirrious.MvvmCross.Binding.BindingContext.MvxBindingContextOwnerExtensions.AddBindings (IMvxBindingContextOwner view, IEnumerable1个绑定,System.Object的clearKey)[0x00028]在C:\项目\其它\ MVVMCROSS\Cirrious\Cirrious.MvvmCross.Binding \的BindingContext\MvxBindingContextOwnerExtensions.cs:69在Cirrious.MvvmCross.Binding.BindingContext.MvxBindingContextOwnerExtensions.AddBindings(IMvxBindingContextOwner视图,System.Object的目标,IEnumerable的1 bindingDescriptions, System.Object clearKey) [0x00019] in c:\Projects\Misc\MVVMCROSS\Cirrious\Cirrious.MvvmCross.Binding\BindingContext\MvxBindingContextOwnerExtensions.cs:90 at Cirrious.MvvmCross.Binding.BindingContext.MvxBindingContextOwnerExtensions.AddBinding (IMvxBindingContextOwner view, System.Object target, Cirrious.MvvmCross.Binding.Bindings.MvxBindingDescription bindingDescription, System.Object clearKey) [0x0000e] in c:\Projects\Misc\MVVMCROSS\Cirrious\Cirrious.MvvmCross.Binding\BindingContext\MvxBindingContextOwnerExtensions.cs:83 at Cirrious.MvvmCross.Binding.BindingContext.MvxBaseFluentBindingDescription1 [System.String].适用()[0x00000]中:0在Cirrious.MvvmCross.Binding.BindingContext.MvxFluentBindingDescriptionSet`2 [ Trimble.TFM.FieldApp.HomeView,Trimble.TFM.FieldApp.Common.HomeViewModel] .Apply()[0x00000] in:0
谢谢,乔恩
Stu*_*art 16
Fluent绑定使用如下代码:
set
.Bind(<target object for bind>)
.For(<property on target object>) // leave this out to use the "default binding property for the target object"
.To(<property/expression on source object>)
.WithConversion(<converter>, <converter parameter>) // optional
.OneWay() // optional - also: OneWayToSource(), TwoWay() or OneTime()
.FallbackValue(<value to use for UnsetValue>(); // optional
Run Code Online (Sandbox Code Playgroud)
您可以在以下网址了解更多信息:
你的绑定是:
set.Bind(Title).To(vm => vm.ProjectName);
Run Code Online (Sandbox Code Playgroud)
所以你有约束力:
.Bind(Title)- 当前Title对象中的任何内容(通常是null)ProjectName您的DataContext(通常是您的ViewModel)我想你想要的是:
set.Bind(this).For(v => v.Title).To(vm => vm.ProjectName);
Run Code Online (Sandbox Code Playgroud)
我想你也可以这样做:
set.Bind().For(v => v.Title).To(vm => vm.ProjectName);
Run Code Online (Sandbox Code Playgroud)
话虽如此,Mvx堆栈实际上不应该有一个null目标和属性 - 它不习惯 - 因此我会将此作为一个问题添加到调查并添加一个回归测试,为什么TryCreateSpecificFactoryBinding无法处理null.
| 归档时间: |
|
| 查看次数: |
1676 次 |
| 最近记录: |