2014-10-10 5 views
0

알림 속성 변경 메카니즘의 INC<T> 버전을 사용하려고했는데 이는 Property + Field + RaisePropertyChanged 버전보다 훨씬 간결합니다.FieldBinding 및 약한 참조

하지만, 나는이 ViewModel에 있다고 가정 해 봅시다 : 내 안드로이드 활동에서 오전 가정 해 봅시다 지금

public abstract class PageViewModel : MvxViewModel 
{ 
    /// <summary> 
    ///  The is loading 
    /// </summary> 
    public readonly INC<bool> IsLoading = new NC<bool>(); 

    /// <summary> 
    ///  The subtitle 
    /// </summary> 
    public readonly INC<string> Subtitle = new NC<string>(); 

    /// <summary> 
    ///  The title 
    /// </summary> 
    public readonly INC<string> Title = new NC<string>(); 

을, 나는 이러한 속성에 가입하고자 할 :

public partial class MainView : IFragmentHost 
{ 
    private void Subscribe(PageViewModel viewModel) 
    { 
     viewModel.Title.Changed += (xx) => Whatever; 
    } 

을 두 번째에 하지만, 그렇게 그들에게 WeakSubscribe 것이 좋을 것이다 :

viewModel.Title.WeakSubscri... 

Mmmmh 이상, 나는 아무런 자동 완성이 없다 그.

public static class MvxWeakSubscriptionExtensionMethods 
{ 
    public static MvxNotifyPropertyChangedEventSubscription WeakSubscribe(this INotifyPropertyChanged source, EventHandler<PropertyChangedEventArgs> eventHandler) 
    { 
     return new MvxNotifyPropertyChangedEventSubscription(source, eventHandler); 
    } 

    public static MvxValueEventSubscription<T> WeakSubscribe<T>(this EventInfo eventInfo, object source, EventHandler<MvxValueEventArgs<T>> eventHandler) 
    { 
     return new MvxValueEventSubscription<T>(source, eventInfo, eventHandler); 
    } 

그리고 이제 INC<T>

public interface INC<T> : INotifyChange<T>, INotifyChange 

그래서하는 INC<T> 특성에 가입 약한 방법이있다 :

는의는 MvxWeakSubscriptionExtensionMethods 보자?

답변

0

자체를 사용하여 약한 참조를 사용하여 바인딩을 만드는 플러그인 : NotifyChangeOnChanged이있다

IDisposable _subscription = NotifyChangeEventInfo.WeakSubscribe(_notifyChange, NotifyChangeOnChanged); 

서명 :

protected abstract void NotifyChangeOnChanged(object sender, EventArgs eventArgs); 

https://github.com/MvvmCross/MvvmCross/blob/3.2/Plugins/Cirrious/FieldBinding/Cirrious.MvvmCross.Plugins.FieldBinding/MvxNotifyChangeFieldSourceBinding.cs#L38

에서