【问题标题】:mvvmcross windows phone 8 custom bindingmvvmcross windows phone 8 自定义绑定
【发布时间】:2014-01-23 00:21:39
【问题描述】:

我想做一个自定义绑定。 当ServerViewModel 中的某个属性发生变化时,我想调用相应ServerView 中的一个函数。 基于 N-28,我可以为 Android 执行此操作,但如何为 Windows phone 8 执行此操作?

核心: ServerViewModel.cs

private bool _textUpdate;
public bool TextUpdate
{
  get { return _textUpdate; }
  set
  {
 _  textUpdate = value;
    if (value) {
      RaisePropertyChanged(() => TextUpdate);
    }
  }
}

安卓: 设置.cs:

protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry)
{
  registry.RegisterCustomBindingFactory<ServerView>(
      "SERVERVIEW",
      dcs => new ServerViewTargetBinding(dcs));
  base.FillTargetFactories(registry);

Android ServerViewTargetBinding.cs

public class ServerViewTargetBinding : MvxAndroidTargetBinding
{
  public ServerViewTargetBinding(ServerView target)
  : base(target)
  {
    //only one way target.MyCountChanged += TargetOnMyCountChanged;
  }

  protected override void SetValueImpl(object target, object value)
  {
    throw new NotImplementedException();
  }

  public override void SetValue(object value)
  {
    var target = Target as ServerView;

    if (target == null)
     return;

    target.ServerCallback((bool)value);
  }

  public override Type TargetType
  {
    get { return typeof(ServerView); }
  }

  public override MvxBindingMode DefaultMode
  {
    get { return MvxBindingMode.OneWay; }
  }
}

Android ServerView.cs

set.Bind(this).For("SERVERVIEW").To(vm => vm.TextUpdate);

public void ServerCallback(bool value)
{
  if (_isUpdating)
    return;

  _isUpdating = true;
  try{
    _text.SetText(value);
  }
  finally{
    _isUpdating = false;
  }
}

【问题讨论】:

    标签: c# windows-phone-8 binding mvvmcross


    【解决方案1】:

    如果您想在 Windows 中使用 mvvmcross 绑定 - 包括自定义绑定 - 则需要包含 bindingex 包 - 请参阅 n=35 视频以获取 WindowsStore 中的示例(电话类似)。完成后,您可以添加自定义绑定并在 xaml 中的 Bi.nd 语句中使用它们。

    或者,您可以使用附加属性来实现所需的效果 - 请参阅http://msdn.microsoft.com/en-us/library/ms749011(v=vs.110).aspx

    【讨论】:

    • 我可以看到你可以调用 valueconverter,但是你如何调用回调函数,从 viewModel 到 view?
    • 我可以做所有的调用,除了受保护的覆盖 void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry) { registry.RegisterCustomBindingFactory( "SERVERVIEW", dcs => new ServerViewTargetBinding(dcs)); base.FillTargetFactories(注册表); }