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