Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 绑定到singleton属性_Android_Mvvmcross - Fatal编程技术网

Android 绑定到singleton属性

Android 绑定到singleton属性,android,mvvmcross,Android,Mvvmcross,有没有一种方法可以将VM的属性绑定到任何类型的singleton属性(静态资源属性、singleton服务中的属性…),而不需要使用IMessenger或处理SingletonServiceResolved OnPropertyChanged 让每个活动处理我的singleton Clock属性中的更改对我来说有点脏(即使它在基类中) public class ClockService : ObservableObject, IClockService { private DateTim

有没有一种方法可以将VM的属性绑定到任何类型的singleton属性(静态资源属性、singleton服务中的属性…),而不需要使用IMessenger或处理SingletonServiceResolved OnPropertyChanged

让每个活动处理我的singleton Clock属性中的更改对我来说有点脏(即使它在基类中)

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");
    }
} 

绑定到singleton的一种方法是通过ViewModel上的属性公开singleton:

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

注释单例不是常量后更新:

您可以使用另一个常量单例作为保持器-然后可以实现
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); } 
    }
}
然后,您的虚拟机可以使用以下属性:

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

然后,您的视图可以绑定到像
ThingHolder.CurrentThing

这样的表达式。此解决方案的问题是UI永远不会更改属性。。。所以它不会刷新。我想问的是,有没有什么方法可以帮助我避免处理在你发表评论后编辑的EventSubscription(或messageSubscription)——但实际上,我会小心你在这里使用的
Singleton
术语,因为我认为这可能会让其他人感到困惑——
Singleton
的意思被广泛理解“仅创建了一个实例”-例如,请参阅-通常不理解为表示存在“当前”实例(以我的经验)。我没有指出,但IClockService(在本例中)在初始化期间由CreatableTypes()像singleton一样解析。EndingWith(“服务”).AsInterface().RegisterAsingleton();所以只有一个ClockService实例,它是Clock属性。我遗漏了什么吗?