List和ObservableCollection和ListBinding在MVVM模式下的对比

这篇具有很好参考价值的文章主要介绍了List和ObservableCollection和ListBinding在MVVM模式下的对比。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

List和ObservableCollection和ListBinding在MVVM模式下的对比

List

当对List进行增删操作后,并不会对View进行通知。

//Employee
public class Employee : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler? PropertyChanged;
    public string Name { get; set; }
    private int salary;
    public int Salary
    {
        get { return salary; }
        set
        {
            salary = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Salary)));
        }
    }
}
<!--View-->
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition Height="40" />
    </Grid.RowDefinitions>
    <DataGrid ItemsSource="{Binding Employees}" />
    <StackPanel
        Grid.Row="1"
        VerticalAlignment="Center"
        Orientation="Horizontal">
        <Button Command="{Binding addCommand}" Content="Add" />
        <TextBlock Text="工资总额" />
        <TextBox Text="{Binding TotalSalary, Mode=OneWay}" />
    </StackPanel>
</Grid>
//MainViewModel
public partial class MainViewModel:INotifyPropertyChanged
{
    public List<Employee> Employees { get; }
    public int TotalSalary=>Employees.Sum(x => x.Salary);

    
    public MainViewModel()
    {
        Employees = new List<Employee>() { 
            new Employee(){Name="Tom",Salary=200},
            new Employee(){Name="Tim",Salary=450},
            new Employee(){Name="Jerry",Salary=780},
            new Employee(){Name="Jake",Salary=540},
            new Employee(){Name="Kit",Salary=670},
        };
        
    }
    [RelayCommand]
    private void add()
    {
        Employees.Add(new Employee() {  Name = "Lit", Salary = 260 });
        //通知TotalSalay
        PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(nameof(TotalSalary)));
    }

    public event PropertyChangedEventHandler? PropertyChanged;
}

List和ObservableCollection和ListBinding在MVVM模式下的对比,WPF,list,windows,.net,wpf,xaml

可以看到,点击Add后,上面列表中并没有更新,但是工资总额已经更新,这说明新的数据已经加到了List中,但是List并没有通知View。

ObservableCollection

  • ObservableCollection可以在增加和删除时,对View进行通知

    修改MainViewModel

    public partial class MainViewModel:INotifyPropertyChanged
    {
        public ObservableCollection<Employee> Employees { get; }
        public int TotalSalary=>Employees.Sum(x => x.Salary);
    
        
        public MainViewModel()
        {
            Employees = new ObservableCollection<Employee>() { 
                new Employee(){Name="Tom",Salary=200},
                new Employee(){Name="Tim",Salary=450},
                new Employee(){Name="Jerry",Salary=780},
                new Employee(){Name="Jake",Salary=540},
                new Employee(){Name="Kit",Salary=670},
            };
            
        }
        [RelayCommand]
        private void add()
        {
            Employees.Add(new Employee() {  Name = "Lit", Salary = 260 });
            PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(nameof(TotalSalary)));
        }
        //增加一个Modify方法
        [RelayCommand]
        private void Modify()
        {
            Employees[2].Salary = 999;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(TotalSalary)));
        }
    
        public event PropertyChangedEventHandler? PropertyChanged;
    }
    

    List和ObservableCollection和ListBinding在MVVM模式下的对比,WPF,list,windows,.net,wpf,xaml

    可以发现,点击Add,View中也相应地进行了更新,而且工资总额也相应改变。同时,无论是add还是Modify,都使用了PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(TotalSalary)));它的改进做法是使用CollectionChanged事件。

//改进做法,增加CollectionChanged,可以删除add()和Modify()的PropertyChanged...了
Employees.CollectionChanged += (_, _) => { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(TotalSalary))); };

BindingList

BindingList提供了更多的功能,提供了排序、搜索、过滤等功能。此外,BindingList 还提供了对数据源的更多控制,如 AllowNew、AllowEdit 和 AllowRemove 属性,用于控制是否允许添加、编辑和删除项。

BindingList提供了ListChanged事件,该事件参数中提供了详细的信息,但是ObservableCollection 是线程安全的,可以在多个线程中使用。而 BindingList 不是线程安全的,如果需要在多个线程中使用,需要进行额外的线程同步处理。文章来源地址https://www.toymoban.com/news/detail-661206.html

到了这里,关于List和ObservableCollection和ListBinding在MVVM模式下的对比的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • iOS----MVVM模式

    提到MVVM框架我们很容易想到MVC框架,iOS中,我们使用的大部分都是MVC架构,虽然MVC的层次明确,但是由于功能日益的增加,代码的维护,更多的代码被写在了Controller中,这样Controller就显得非常臃肿。 为了给Controller瘦身,减少 View Controller 的复杂性并使得表示逻辑更易于测试

    2024年02月02日
    浏览(33)
  • vue的mvvm模式

    低耦合:视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的View上,当View变化的时候Model可以不变,当Model变化的时候,View也可以不变。 可复用:可以把一些视图逻辑放到一个ViewModel里面,让很多View重用这段视图逻辑。 独立开发:开发人员可以专注于业务

    2024年01月15日
    浏览(37)
  • MVVM架构模式

    一、MVVM简介 MVVM是Model-View-ViewModel的简写。即是模型-视图-视图模型。 MVVM架构模式是一种软件设计模式,它将应用程序分为三个部分:模型(Model)、视图(View)和视图模型(ViewModel)。该模式的目的是将用户界面(UI)逻辑与业务逻辑分离,以便开发人员可以更轻松地管理

    2024年02月11日
    浏览(35)
  • 深入理解MVVM架构模式

    原文合集地址如下,有需要的朋友可以关注 本文地址 MVVM是一种用于构建用户界面的软件架构模式,它的名称代表着三个组成部分:Model(模型)、View(视图)和ViewModel(视图模型)。MVVM的主要目标是将应用程序的UI与其底层数据模型分离,通过数据绑定实现数据和UI的自动

    2024年02月12日
    浏览(34)
  • Angular系列教程之MVC模式和MVVM模式

    在讨论Angular的时候,我们经常会听到MVC和MVVM这两种设计模式。这两种模式都是为了将用户界面(UI)和业务逻辑分离,使得代码更易于维护和扩展。在这篇文章中,我们将详细介绍这两种模式,并通过示例代码展示Angular是如何实现MVVM模式的。 MVC模式是Model-View-Controller的缩写,

    2024年01月17日
    浏览(50)
  • MVC与MVVM模式的区别

    Model(模型):用于处理应用程序数据逻辑,负责在数据库中存取数据。处理数据的crud View(视图):处理数据显示的部分。通常视图是依据模型数据创建的。 Controller(控制器):处理 数据显示 的部分,控制器负责从视图读取数据,控制用户输入,并将数据发送给模型。一

    2024年02月15日
    浏览(42)
  • 【软件架构模式——MVC、MVP、MVVM】

    1. MVC(Model-View-Controller) 概念介绍: MVC是一种软件架构模式,用于组织应用程序的代码和逻辑。它将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。 **模型(Model)**负责处理应用程序的数据逻辑和状态。它表示应用程序的数据源,并封装了与

    2024年02月11日
    浏览(62)
  • 第六章:自建MVVM模式的简易项目框架

    前面的几章为我们筑好了MVVM的基础,在这一章中我们将自己搭建一个MVVM模式下的简易项目框架。 MVVM是一种模式,主要目的是降低界面和业务逻辑的耦合。 MVVM是Model-View-ViewModel(模型-视图-视图模型)的简写。是WPF开发过程中必不可少的一种开发模式,MVVM基本结构如下图所

    2023年04月26日
    浏览(74)
  • C# WPF简单的MVVM模式事例

    WPF中使用MVVM模式开发有诸如以下优点: 1.结构清晰明朗,上手成本低,一个新人也能快速的定位自己需要改动代码的位置。 2.耦合度低,更改WPF控件不影响数据结构,更改代码成本低。 3.可重用性高,比如一个处理逻辑放到ViewModel模块中,其他界面如果要用掉直接调用即可。

    2024年02月09日
    浏览(50)
  • Android MVVM架构模式,详详详细学习

    是一种基于数据绑定的架构模式,用于设计和组织应用程序的代码结构。它将应用程序分为三个主要部分:Model(模型)、View(视图)和ViewModel(视图模型)。 Model(模型):负责处理数据和业务逻辑。它可以是从网络获取的数据、数据库中的数据或其他数据源。Model层通常

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包