Xamarin.ios MvvmCross:UIDatePicker时间更改不会触发绑定
我正在使用Xamarin.iOS和MvvmCross构建页面视图。我有一个UIView,其中包含DateAndTime模式下的UIDatePicker。如果我在绑定vm属性中设置断点并更改日期,我可以看到绑定触发。如果我更改了时间,但是绑定属性上没有任何更新 代码如下:Xamarin.ios MvvmCross:UIDatePicker时间更改不会触发绑定,xamarin.ios,mvvmcross,Xamarin.ios,Mvvmcross,我正在使用Xamarin.iOS和MvvmCross构建页面视图。我有一个UIView,其中包含DateAndTime模式下的UIDatePicker。如果我在绑定vm属性中设置断点并更改日期,我可以看到绑定触发。如果我更改了时间,但是绑定属性上没有任何更新 代码如下: [Register("EditJobViewJobView")] public class EditJobView : MvxViewController { public new EditJobViewModel Vi
[Register("EditJobViewJobView")]
public class EditJobView : MvxViewController
{
public new EditJobViewModel ViewModel
{
get { return (EditJobViewModel)base.ViewModel; }
}
private const float _leftMargin = 6;
private const float _labelHeight = 20;
private const float _pickerHeight = 28;
private readonly UIFont _labelFont = UIFont.BoldSystemFontOfSize(18f);
private readonly UIFont _controlFont = UIFont.SystemFontOfSize(18f);
private readonly UIView _paddingInsert = new UIView(new RectangleF(0, 0, 4, 0));
private int _currentTop = 0;
public override void ViewDidLoad()
{
base.ViewDidLoad();
View = new UIView() { BackgroundColor = UIColor.White };
NavigationItem.SetRightBarButtonItem(new UIBarButtonItem("Save", UIBarButtonItemStyle.Bordered,
(sender, args) => ViewModel.OkCommand.Execute(null)), true);
// ios7 layout
if (RespondsToSelector(new Selector("edgesForExtendedLayout")))
EdgesForExtendedLayout = UIRectEdge.None;
Title = "Edit Job";
AddLabel("Start On");
UIDatePicker startOnPicker;
var startOnView = AddDateTimeView(out startOnPicker);
var set = this.CreateBindingSet<EditJobView, EditJobViewModel>();
set.Bind(startOnPicker).For("DateAndTime").To(vm => vm.TestStartOn);
set.Bind(startOnView).To(vm => vm.TestFormatted);
set.Apply();
}
private void AddLabel(string caption)
{
_currentTop += 10;
var frame = new RectangleF(_leftMargin, _currentTop, 300, _labelHeight);
var label = new UILabel(frame);
label.Font = _labelFont;
label.Text = caption;
AddView(label);
_currentTop += 2;
}
private UITextField AddDateTimeView(out UIDatePicker datePicker)
{
var textField = AddTextField();
datePicker = new UIDatePicker();
datePicker.Mode = UIDatePickerMode.DateAndTime;
textField.InputView = datePicker;
return textField;
}
private UITextField AddTextField()
{
var frame = new RectangleF(_leftMargin, _currentTop, 300, _pickerHeight);
var textField = new UITextField(frame);
textField.Layer.BorderColor = UIColor.Black.CGColor;
textField.Layer.BorderWidth = 1f;
textField.Font = _controlFont;
textField.LeftView = _paddingInsert;
textField.LeftViewMode = UITextFieldViewMode.Always;
AddView(textField);
return textField;
}
private void AddView(UIView view)
{
View.AddSubview(view);
_currentTop += (int)view.Frame.Height;
}
}
下面是连接它的启动代码:
protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry)
{
registry.RegisterCustomBindingFactory<UIDatePicker>(
"DateAndTime",
binary => new DatePickerDateAndTimeTargetBinding(binary));
base.FillTargetFactories(registry);
}
受保护的覆盖无效FillTargetFactorys(IMvxTargetBindingFactoryRegistry注册表)
{
registry.RegisterCustomBindingFactory(
“日期和时间”,
binary=>new DatePickerDateAndTimeTargetBinding(二进制));
base.FillTargetFactorys(注册表);
}
日期绑定只绑定日期-请参阅中的源代码
如果您想创建自己的自定义
DateAndTime
绑定,那么使用和的源代码应该很容易做到-然后您可以在安装过程中注册自定义绑定(有关如何注册自定义绑定的信息,请参阅N+1视频N=28)谢谢Stuart。我已经基于N=28编写了一个定制的DateAndTime活页夹,并用代码更新了我的问题。调用了FireValueChange,但未调用绑定的vm属性。有什么想法吗?发现了问题-如果我从GetDate()返回NSDate绑定不起作用。如果我返回日期时间,一切正常。
protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry)
{
registry.RegisterCustomBindingFactory<UIDatePicker>(
"DateAndTime",
binary => new DatePickerDateAndTimeTargetBinding(binary));
base.FillTargetFactories(registry);
}