当前位置: 首页 > news >正文

杭州做网站公司哪家好百度搜索广告投放

杭州做网站公司哪家好,百度搜索广告投放,做网站子页,在香港做网站需要什么ReactiveUI MVVM框架(1)-Collections ReactiveUI使用动态数据(DynamicData)用于集合的操作。 当对动态数据集合进行更改时,会产生更改通知,通知表示为ChangeSet,里面包含了更改信息&#xff0…

ReactiveUI MVVM框架(1)-Collections

ReactiveUI使用动态数据(DynamicData)用于集合的操作。

当对动态数据集合进行更改时,会产生更改通知,通知表示为ChangeSet,里面包含了更改信息,多个更改通知为IObservable<ChangeSet>。动态数据提供了两种特定的集合,分别是SourceCache<TObject, TKey>SourceList<T>。第一个为带key的字典式,也就是不能重复,第二个为集合式。如何要将这两种集合转换为IObservable<ChangeSet>,可以使用Connect方法。

需要注意的是,这跟WPF中常用的ObservableCollection<T>的实现方式是不同的。

简单使用

从wpf中常用的ObservableCollection<T>得到IObservable<ChangeSet>

// 'myList' is ObservableCollection<T>
// 'myDerivedList' is IObservableList<T>
var myDerivedList = myList.ToObservableChangeSet().Filter(t => t.Status == "Something").AsObservableList();// 'myList' is ObservableCollection<T>
// 'myDerivedCache' is IObservableCache<T, TKey>
var myDerivedCache = myList.ToObservableChangeSet(t => t.Id).Filter(t => t.Status == "Something").AsObservableCache();

以上两种方式是线程不安全的,加入myList绑定到了View上,那么在View上也可能对myList进行更改。推荐的方法是先创建一个数据源。

var myList = new SourceList<T>()
var disposable = myList.Connect() // 获得IObservable<ChangeSet>.\\some other operation

这种方法的好处是可以在后台线程上进行维护。比如:

//ReadOnlyObservableCollection可以多线程操作
ReadOnlyObservableCollection<T> bindingData;
var disposable = mySource.Connect() // make the source an observable change set.Sort(SortExpressionComparer<T>.Ascending(t => t.DateTime)).ObserveOn(RxApp.MainThreadScheduler) // 'mySource' 会在其他线程上更新.Bind(out bindingData).Subscribe(); 

ReactiveUI使用动态数据

开发时,会遇到可变集合和不可变集合,当对不可变集合进行处理时,简单情况下可以使用ObservableAsPropertyHelper<T>,它包含一个Observable<T>。每次给集合赋予新的集合时会触发通知事件。

而对于可变集合,往往采用动态数据的方式。

案例

public class Service 
{//定义一个数据集private readonly SourceList<bool> _items = new SourceList<bool>();//暴露给外面public IObservable<IChangeSet<bool>> Connect() => _items.Connect();public Service(){        _items.Add(true);_items.RemoveAt(0);_items.Add(false);}
}

ReadOnlyObservableCollection

  • 动态数据往往使用ReadOnlyObservableCollection<T>之类的类型对外公开,而不是它本身的类型。IObservable<IChangeSet<T>>IObservable<IChangeSet<TObject, TKey>>是可以观测类型,IObservable<IChangeSet<T>>中含有集合更改的内容,第一次使用ToObservableChangeSet()时会发出集合的当前状态。
  • SourceListSourceCache是可以使用多线程进行创建IObservable<IChangeSet<T>>等,通常SourceListSourceCache应该定义为Private,而是通过Connect方法暴露给View。
public class ViewModel : ReactiveObject
{private readonly ReadOnlyObservableCollection<bool> _items;public ReadOnlyObservableCollection<bool> Items => _items;public ViewModel(){var service = new Service();service.Connect()// Transform 和Select方法类似,只不过是观察一个集合的变化且将元素投影到另一个集合.Transform(x => !x)// Filter 类似于Where.Filter(x => x)// 确保更先到UI线程..ObserveOn(RxApp.MainThreadScheduler)// 通过 .Bind() 方法实现可变集合包含新的数据并且刷新UI.Bind(out _items).Subscribe();}
}

ObservableCollectionExtended

ObservableCollectionExtended<T>是一个单线程集合,如果要同步VM中的两个集合,可以将其中一个声明为ObservableCollectionExtended<T>,另一个声明为ReadOnlyObservableCollection<T>,然后使用.ToObservableChangeSet()方法将其转换为IObservable<IChangeSet<T>>

public class SynchronizedCollectionsViewModel : ReactiveObject
{private readonly ReadOnlyObservableCollection<bool> _derived;public ReadOnlyObservableCollection<bool> Derived => _derived;public ObservableCollectionExtended<bool> Source { get; }public SynchronizedCollectionsViewModel(){Source = new ObservableCollectionExtended<bool>();Source.ToObservableChangeSet().Transform(value => !value)// 在这里不需要使用ObserveOn更新UI线程,因为它是单线程.Bind(out _derived).Subscribe();Source.Add(true);Source.RemoveAt(0);Source.Add(false);Source.Add(true);}
}

根据集合中的更改

ReactiveObject类实现了INotifyPropertyChanged,动态数据可以对ReactiveObject类进行跟踪。

// 'collectionOfReactiveObjects' 是 ObservableCollection<T>
//  T inherits 继承自 ReactiveObject
// 'databasesValid' 则是 IObservable<bool>
var databasesValid = collectionOfReactiveObjects.ToObservableChangeSet().AutoRefresh(model => model.IsValid) // 订阅IsValid属性的更改.ToCollection()                      // 获取新项目集合.Select(x => x.All(y => y.IsValid)); // 验证是否满足条件.// 将IObservable<bool> 转为视图模型
// '_databasesValid' 是ObservableAsPropertyHelper<bool> 类型
_databasesValid = databasesValid.ToProperty(this, x => x.DatabasesValid);

ReactiveList转为动态数据

如果使用的是ReactiveList<T>,并且仅从UI线程添加/删除,则使用ObservableCollectionExtended<T>

http://www.tj-hxxt.cn/news/56890.html

相关文章:

  • 哈尔滨营销型网站制作网络自动推广软件
  • 找人做网站注意事项网络推广外包公司哪家好
  • 芜湖住房和城乡建设委员会网站优化网站搜索排名
  • 电子书网站搭建教程合肥seo优化外包公司
  • 网站制作 徐州vivo应用商店
  • 中国营销咨询公司排名营口seo
  • 付运费送东西的网站怎么做6嘉兴seo外包
  • 做平台推广怎么找客户seo快速排名软件网站
  • 网站后台页面整合网络营销外包
  • 微信公众号怎么二次开发东莞关键词优化实力乐云seo
  • 阿里云建设网站步骤友情链接导航
  • 什么样配置的虚拟主机打开网站快企业推广视频
  • 网站建设技术服务的方式是什么网络营销的内容有哪些方面
  • 如何建设好高校网站图片扫一扫在线识别照片
  • wordpress quizzin上海seo优化公司bwyseo
  • php5 mysql网站开发实例精讲沧州做网络推广的平台
  • 传奇网站怎么建设潍坊今日头条新闻最新
  • 南昌手机网站制作新的数据新闻
  • o2o网站开发价格百度客服
  • java网站开发的需求文档惠州网站排名提升
  • 没有网站做APP百度搜索热度排名
  • 德州市建设街小学官方网站免费建立个人网站官网
  • 上海做网站福州百度关键词排名
  • 客源软件哪个最好北京seo薪资
  • 广州网站建设网站优化网站推广外国网站怎么进入
  • 网站建建设公司和网络自建seo排名优化点击软件有哪些
  • 政府门户网站建设项目招标采购上海全网推广
  • 上海知名网站建设公司北京竞价托管代运营
  • 职业生涯规划大赛含金量高吗seo云优化方法
  • 南京cms建站快速推广