2014-01-23 4 views
0

Я хочу сделать пользовательскую привязку. Когда свойство в ServerViewModel изменяется, я хочу вызвать функцию в соответствующем ServerView. На основе N-28 я могу сделать это для Android, но как это сделать для телефона Windows 8?mvvmcross windows phone 8 custom binding

Core: ServerViewModel.cs

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

Android: Setup.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; 
    } 
} 

ответ

0

Если вы хотите использовать привязки mvvmcross - включая пользовательские привязки - в Windows, то вам нужно включить пакеты bindingex - см. Видео n = 35 для примера в WindowsStore (телефон аналогичен). После того, как вы это сделали, вы можете добавить пользовательские привязки и использовать их в операциях Bi.nd в своем xaml.

В качестве альтернативы, вы можете быть в состоянии достигнуть вашего желаемого эффекта с помощью прикрепленных свойств - см http://msdn.microsoft.com/en-us/library/ms749011(v=vs.110).aspx

+0

я могу видеть, Вы можете сделать ValueConverter вызов, но как Вы можете сделать вызов функции обратного вызова, из ViewModel к просмотру ? – user2831196

+0

я могу сделать все вызов, как в Android, за исключением защищенных отменяют недействительные FillTargetFactories (IMvxTargetBindingFactoryRegistry реестр) { registry.RegisterCustomBindingFactory ( "ServerView", РСА => нового ServerViewTargetBinding (РС)); base.FillTargetFactories (реестр); } – user2831196