首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用INotifyPropertyChanged更新数组绑定?

INotifyPropertyChanged是一个类,用于表示数据源对象的数据发生了变化,并通过事件通知机制使监听器方法得到及时更新。在ASP.NET Web Forms和MVVM框架中经常使用INotifyPropertyChanged实现数据的实时绑定更新,其中数组作为基础数据类型和数组对象经常需要更新属性。

首先,在使用INotifyPropertyChanged更新数组绑定时,需要创建一个新的ObservableCollection<T>类型的数据源,将需要绑定的数组元素添加到这个数组中,并在数据源中实现INotifyPropertyChanged接口的属性,以通知应用程序该数组元素的值有所变化。接下来,使用ItemsSource属性将新创建的数据源绑定到ListBox等控件中,完成更新数组绑定的设置。

下面是一个使用INotifyPropertyChanged更新数组绑定的例子代码:

代码语言:csharp
复制
public class MainViewModel : INotifyPropertyChanged
{
    private string _name;
    public string Name
    {
        get { return _name; }
        set
        {
            if (_name == value)
            {
                return;
            }
            _name = value;
            OnPropertyChanged();
        }
    }

    private ObservableCollection<int> _data;
    public ObservableCollection<int> Data
    {
        get { return _data; }
        set
        {
            if (_data == value)
            {
                return;
            }
            _data = value;
            OnPropertyChanged();
        }
    }

    public MainViewModel()
    {
        _name = "";
        _data = new ObservableCollection<int>();
        _data.Add(1);
        _data.Add(2);
        _data.Add(3);
    }

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

private void OnPropertyChanged(string propertyName)
{
    if (PropertyChanged != null)
    {
        PropertyChangedEventArgs e = new PropertyChangedEventArgs(propertyName);
        PropertyChanged(this, e);
    }
}

在本例中,我们定义了一个名为MainViewModel的数据承载型(ViewModel)控制对象,其中包含一个Name属性(String类型)和一个Data属性(ObservableCollection<int>类型)。在Data属性中,我们使用INotifyPropertyChanged接口实现了其值的变动,并使用PropertyChanged事件处理机制让MainViewModel及时通知到相关调用方。

MainViewModel的CreateInstance()方法中,我们初始化了一个包含3个元素的Data属性。这里有一个非常重要的环节,即使用OnPropertyChanged方法实现PropertyChanged事件的分发。这方法是一个虚方法(virtual),在数据属性的set方法中对事件进行委派调用。这样,在数据属性发生值变更时,事件将得到即时响应并通知到应用程序的相关组件。

以上示例代码中定义的MainViewModel具有两个属性,即NameData。将一个ObservableCollection<int>类型的Data属性作为一个数组来对待,其数组元素的添加、删除以及赋值操作均可以通过INotifyPropertyChanged实现动态绑定和数据实时同步。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • win10 uwp 如何使用DataTemplate 转换绑定Event到Command绑定 ObservableCollectionDataTemplate 绑定 ViewM

    这是数据模板,一般用在数组绑定,显示数组中的元素。...使用很简单,我们可以定义在资源,也可以定义在ItemTemplate。 数据模板有绑定的问题。...我们使用x:bind需要我们对我们数据的类型,这个在前没有,我开始不知,弄了好久,最后才知道,还有一个,UWP默认是OneTime,也就是绑定只有一次。...对于定义控件,可能也需要,如何绑定一个 List 可以知道已经修改。...先把东西分来说:一个是如何定义一个和 ObservableCollection 差不多,可以绑定界面,修改就自动让界面修改。一个是如何定义控件,可以获得列表改变。

    2.6K20

    dotnet C# 基于 INotifyPropertyChanged 实现一个 CLR 属性绑定辅助类

    阅读本文,能让大家知道 dotnet 里面的 INotifyPropertyChanged 的设计以及绑定的用法,以及了解到如何使用和实现 CLR 属性绑定辅助类。...我实现的 CLR 属性绑定辅助类和对应的全部代码,都可以在本文末尾找到代码的下载方式 本文的编写顺序是先告诉大家基础的概念定义,接着是如何编写实现 CLR 属性绑定辅助类,最后是此属性绑定辅助类的使用方法和获取源代码的方法...于是我准备先介绍一下属性绑定的基础使用思路,所谓属性绑定就是将两个属性关联绑定在一起,当一个属性变更时,另一个属性也可以随着进行变更。...反过来也是 至于双向绑定和单向绑定的差别只是在于,绑定的双方的更新方向而已。双向绑定的意思就是绑定的两个属性,无论是哪个属性更新了,另一个属性都会跟着更新。...,也就是通过监听 INotifyPropertyChanged 约束的 PropertyChanged 事件,了解到属性的变更,以及是哪个属性发生了变更,从而进行更新绑定里面,约定了两个概念,分别是

    1.4K20

    通过 INotifyPropertyChanged 实现观察者模式

    当属性改变时,它可以通知客户端,并进行界面数据更新.而我们不用写很多复杂的代码来更新界面数据,这样可以做到方法简洁而清晰,松耦合和让方法变得更通用.可用的地方太多了:例如上传进度,实时后台数据变更等地方...之前,一直在讨论如何将目标对象与一个单一对象绑定。Silverlight中的数据绑定还能将目标对象与集合对象相绑定,这也是很常用的。比如显示文章的题目列表、显示一系列图片等。  ...如果要绑定到一个集合类型的数据源对象,绑定目标可以使用ItemsControl,如ListBox或DataGrid等。...使用ObservableCollection   数据源集合对象必须继承IEnumerable接口,为了让目标属性与数据源集合的更新(不但包括元素的修改,还包括元素的增加和删除)保持同步,数据源集合还必须实现...在Silverlight中创建数据源集合可以使用内建的ObservableCollection类,因为ObservableCollection类既实现了INotifyPropertyChanged接口,

    2.8K10

    更新完IDEA后,如何永久使用

    本文共685字 阅读约需1.5分钟 (后台回复“IDEA破解”可获取一份最新破解补丁) 起因 今天一早用IDEA写代码,看到右下角有提示更新,有点强迫症的我,就手欠的又点了下更新...,结果悲剧了,居然提示许可证过期,IDEA过期了,如下图所示: 我就想用下最新版的,竟这样对我,只给两天的使用时间,是不是有点过分了?...如何破解 1、下载文件:jetbrains-agent.jar(后台回复“IDEA破解”,即可领取),取码:k846,放到目录为:D:\JetBrains\下。...2、更新后,点击Continue Evaluation,然后会弹出激活界面,接着,还请大家参考如下图步骤操作: 3、在弹出的界面中点击下侧的Configure,选择Edit Custom

    5K30

    如何使用JavaScript 将数据网格绑定到 GraphQL 服务

    GraphQL 还使用类型系统来提供更好的错误检查和消息传递。...实际使用 日常开发过程中我们可以用我们常用的JavaScript来直接操作GraphQL,并将自己想要的数据呈现在页面上, 我们可以参考这个简单的应用程序,我们将仅使用 fetch API 来调用 GraphQL...,且这是一种双向绑定关系,因此一旦数据有变动,页面的表格内渲染的数据也会相应的变动!...categoryId } categories { categoryId categoryName } } 如果我们将其放入查询测试器中,我们可以看到现在得到两个数组...它与SpreadJS配合得很好,尤其是我们的数据绑定功能组件。本教程展示了 GraphQL 和 SpreadJS如何简单地构建应用程序。

    14110

    silverlight数据绑定模式TwoWay,OneWay,OneTime的研究

    ),所以当控件属性或数据源变化后,在如何相互影响这一块的处理上有所不同。...Silverlight 支持以下三种类型的绑定: 创建 OneTime 绑定时,该绑定使用源数据更新目标。 创建 OneWay 绑定时以及每当源数据发生变化时,该绑定使用源数据更新目标。...当目标和源有一个发生变化时,TwoWay 绑定更新目标也更新源。或者,您可以禁用自动源更新,只在您选择的时间对源进行更新。...为了能够发生自动目标更新,源对象必须实现 INotifyPropertyChanged 接口,如下一部分所述。 ......当然,实际开发中,我们的数据源通常不会是某一个现成控件的属性,多半是xml/数据库等对应的实体类,这里要注意的是,如果控件与自定义类绑定,自定义类必须实现INotifyPropertyChanged接口

    1.2K60

    C# WPF MVVM项目实战(进阶②)

    01 — 重要的知识点 本篇内容基于CM框架编写,涉及以下知识点: ①实现 INotifyPropertyChanged:在mvvm开发模式中,为了前台和后台更好的解耦合,前台界面一般通过绑定属性的方式获取属性值...,而后台属性值变更后我们需要通知给前台视图,这时候我们的属性值就需要实现INotifyPropertyChanged这个接口。...nuget中引用PropertyChanged.Fody 并在类之前添加: [AddINotifyPropertyChangedInterface] 这样我们的这个类中所有的属性变更后就会主动通知界面更新了...source,$eventArgs)]"/> 后台代码,重点是如何获取当前选择的...然而使用Collapsed的话,在不可视的基础上,它还能将属性在画面上的占位符清除,属性将彻底不影响画面 namespace System.Windows { public enum Visibility

    1.3K20

    如何使用前端表格控件实现数据更新

    前 小编之前分享过一篇文章叫《如何使用前端表格控件实现多数据源整合?》。今天,继续为大家介绍如何使用前端表格控件来更新已连接的数据源信息。...一、设置数据源 设置数据源方式有三种:远程数据源、本地数据源、本地json文件,详细内容可以参考上一篇文章《如何使用前端表格控件实现多数据源整合?》...二、更新数据源 目前,SpreadJS支持两种方式更新数据源,分别是AutoSync和Batch模式。...上面是通过代码的方式设置,那么如何通过 UI 的方式设置?...2.4 数据填报 总结 以上就是使用前端表格控件实现数据更新的全过程,如果您想了解更多信息,欢迎点击这里查看

    11810

    Binding(一):数据绑定

    这节开始分几期来讲一下WPF中Binding的相关用法,本节主要讲使用Binding进行数据绑定。...数据绑定 下面将通过一个实例来讲解如何使用Binding进行数据绑定,具体内容如下: 点击按钮“展示数据”时,将数据显示在上方文本框中。...另外,您可能已经注意到了,我实现了一个System.ComponentModel命名空间下的INotifyPropertyChanged接口,这个接口是实现数据绑定后台必须要继承的接口,从它的字面意思我们也可以知道这个接口是用于通知属性已经改变...总结起来,使用Binding的流程是: 1.实现INotifyPropertyChanged接口 2.为需要绑定的属性的set块添加PropertyChanged事件通知...3.在构造器(不一定是构造器,可以是任何一个早于您使用数据绑定情景之前的方法中)中绑定数据源 或者 使用XAMl的标记扩展绑定数据源 本节到此结束...

    1.4K40
    领券