2014-11-01 2 views
0

VM의 속성을 모든 종류의 싱글 톤 속성 (정적 리소스 속성, 싱글 톤 서비스의 속성 ...)에 바인딩 할 수있는 방법이 있습니까? 예를 들어 IMessenger 또는 SingletonServiceResolved OnPropertyChanged를 처리할까요?싱글 톤 속성에 바인딩

싱글 톤 시계 속성의 변경 사항을 처리하는 데 각 활동을 적용하는 것이 저에게 다소 불편합니다 (기본 클래스에 있더라도). 싱글이 일정 아니라고 코멘트 후

public Thing MySingleton 
{ 
    get 
    { 
     return Thing.Instance; 
    } 
} 

업데이트 : 싱글에 결합하는

public class ClockService : ObservableObject, IClockService { 
    private DateTime _clock; 
    public DateTime Clock { 
     get{ return _clock;} 
     set { _clock = value; RaisePropertyChanged("Clock"); } 
    } 
} 

public class SomeViewModel : BaseViewModel { 
    private IClockService _clockService; 
    private IMvxMessenger _messenger; 

    public SomeViewModel(IClockService clockService, IMvxMessenger messenger) { 
     _clockService=clockService; 
     _messenger = messenger; 

     //trying to avoid 
     clockService.PropertyChanged += OnClockServicePropertyChanged; 

    } 

    public DateTime MyClock { 
     get{return _clockService.Clock;} 
    } 

    private OnClockServicePropertyChanged(...) { 
     if(e.PropertyName=="Clock") RaisePropertyChanged("Clock"); 
    } 
} 

답변

0

한 가지 방법은 뷰 모델의 속성을 통해 싱글을 노출하는 것입니다

다른 싱글 톤을 홀더로 사용할 수 있습니다. 그러면 INotifyPropertyChanged을 구현할 수 있습니다 - 예 :

public class ThingHolder : MvxNotifyPropertyChanged 
{ 
    public static readonly ThingHolder Instance = new ThingHolder(); 

    private Thing _thing; 
    public Thing CurrentThing 
    { 
     get { return _thing; } 
     set { _thing = value; RaisePropertyChanged(() => CurrentThing); } 
    } 
} 

귀하의 VM은 다음과 같은 특성이 있습니다 : UI를하여 PropertyChanged을 결코 것입니다

public ThingHolder ThingHolder 
{ 
    get 
    { 
     return ThingHolder.Instance; 
    } 
} 

귀하의 의견은 ...이 솔루션 ThingHolder.CurrentThing

+0

문제와 같은 표현에 바인딩 할 수 있습니다 그래서 않을 것 새롭게 하다. 나는 당신이 EventSubscription (또는 messageSubscription)을 다루는 것을 피할 수있는 후드 아래에 어떤 방법을 묻는다. – ozapa

+0

당신의 코멘트 후에 편집되었지만, 정말로 혼동을 야기 할 수 있으므로 여기에 '싱글 톤'용어를 사용하는 것에주의해야한다. 다른 것들 -'싱글 톤'은 "오직 하나의 인스턴스가 만들어졌다"는 것을 의미하는 것으로 상당히 널리 알려져있다. http://en.wikipedia.org/wiki/Singleton_pattern을 참조하십시오. 일반적으로 "현재"인스턴스가 있음을 나타내는 것으로 이해하지 못합니다 (경험상). – Stuart

+0

IClockService (이 예제의 경우)는 CreatableTypes(). EndingWith ("Service")에 의해 싱글 톤과 같이 해결되는 초기화 동안입니다. AsInterfaces(). RegisterAsSingleton(); 그래서 ClockService 인스턴스는 하나 뿐이며 Clock 속성입니다. 내가 놓친 게 있니? – ozapa

관련 문제