zoukankan      html  css  js  c++  java
  • 轻量级MVVM框架Stylet介绍:(12) BindableCollection

    概述

    BindableCollection是ObservableCollection的子类。如果您在 ViewModel 中有一个某些内容的集合,并且希望将其用作视图中某些内容的 ItemsSource/ etc(并且每当将项目添加到该集合中/从该集合中删除时,都会通知视图),则它是要使用的类。

    但是,它添加了一些有用的额外功能:

    • 新增方法:AddRange,RemoveRange,Refresh
    • 线程安全

    新方法

    ObservableCollection缺少几个非常有用的方法:AddRange和RemoveRange 。这些几乎可以满足您的期望,允许您一次添加删除一系列元素,而无需手动迭代每个元素并调用collection.Add(element)(同时为每个添加的元素引发大量事件)。 并且AddRange和RemoveRange只会为每个添加/删除的范围引发一组事件。

    Refresh是一种方便。它不会以任何方式修改集合,但会导致触发PropertyChanged 和CollectionChanged 事件,从而向任何 UI 元素指示集合已被修改,并且它们应重新加载其数据。

    线程安全

    线程安全是通过向 UI 线程分派所有操作(添加、删除、清除、重置等)来实现的。调度使用Execute.OnUIThreadSync,这意味着:

    • 这些操作是同步的:在操作完成之前,调用的方法不会返回。
    • 如果您已经在UI线程上,不作处理 - 在这种情况下,操作将同步执行。
    • 所有PropertyChanged事件和CollectionChanged事件始终在 UI 线程上引发。

    最后一点意味着 BindableCollection上没有属性PropertyChangedDispatcher,就像 PropertyChangedBase- 事件总是在 UI 线程上引发一样,因为该属性相关的操作始终在 UI 线程上执行。同样,也没有CollectionChangedDispatcher的概念。

  • 相关阅读:
    背景不动,内容滚动的解决方案(移动端)
    移动端真实1px的实现方法
    用户模板和用户场景
    构建之法阅读笔记02
    学习进度六
    NABCD
    构建之法阅读笔记01
    学习进度五
    梦断代码阅读笔记03
    地铁系统
  • 原文地址:https://www.cnblogs.com/qouoww/p/15798146.html
Copyright © 2011-2022 走看看