c# INotifyPropertyChanged

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
</head>
<body>
    <div id="app">
        <textarea v-model="input"></textarea>
        <button @click="submit">submit</button>
        <div contenteditable="true">
            <pre v-for="item in items">
                protected {{ item.type }} _{{ item.name }};
                public {{ item.type }} {{ item.name }}
                {
                    get { return this._{{ item.name }}; }
                    set
                    {
                        SetField(ref this._{{ item.name }}, value);
                    }
                }
            </pre>
        </div>
    </div>

    <script src="http://cdn.bootcss.com/vue/2.1.6/vue.min.js"></script>

    <script>
        new Vue({
            el: ‘#app‘,
            data() {
                return {
                    items: [],
                    input: null,
                }
            },
            methods: {
                submit() {
                    let lines = this.input
                        .split(/\n/)
                        .map(t => t.trim().split(‘ ‘))
                        .filter(t => t.length > 6)

                    this.items = []

                    lines.forEach(arr => {
                        this.items.push({
                            name: arr[2],
                            type: arr[1],
                        })
                    })
                }
            }
        })
    </script>
</body>
</html>

#region INotifyPropertyChanged

protected void OnPropertyChanged(PropertyChangedEventArgs e)
{
    PropertyChangedEventHandler handler = PropertyChanged;
    if (handler != null)
        handler(this, e);
}

public event PropertyChangedEventHandler PropertyChanged;

protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
    //C# 6 null-safe operator. No need to check for event listeners
    //If there are no listeners, this will be a noop
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

// C# 5 - CallMemberName means we don‘t need to pass the property‘s name
protected bool SetField<T>(ref T field, T value,
[CallerMemberName] string propertyName = null)
{
    if (EqualityComparer<T>.Default.Equals(field, value))
        return false;
    field = value;
    OnPropertyChanged(propertyName);
    return true;
}

#endregion
时间: 2024-10-11 02:12:51

c# INotifyPropertyChanged的相关文章

为Page添加INotifyPropertyChanged功能

在Page页面里面, DataContext 更新后,前台数据要求会自动更新. 但前台的绑定如果用x:bind 语法. 它要求强类型.直接关联到DataContext上就不行了. 需要为Page 添加 INotifyPropertyChanged 接口实现. 页面如果很多的话. 为每个页面实现此接口,代码将有不少重复. 为了减少代码重复量而努力. 现在要在页面代码里面添加vm属性.这是强类型.所以可以让前台使用x:bind. public Vm<设置PageViewModel> VM { ge

INotifyPropertyChanged 接口

2016-07-24 INotifyPropertyChanged 接口 用于向客户端(通常是执行绑定的客户端)发出某一属性值已更改的通知. 例如,考虑一个带有名为 FirstName 属性的 Person 对象.若要提供一般性属性更改通知,则 Person 类型实现 INotifyPropertyChanged 接口并在 FirstName 更改时引发 PropertyChanged 事件. 若要在将客户端与数据源进行绑定时发出更改通知,则绑定类型应具有下列任一功能: 实现 INotifyPr

INotifyPropertyChanged 接口 CallerMemberName属性

2016-07-24 调用方信息 使用调用方信息属性,可以获取关于调用方的信息传递给方法. 可以获取源代码.行号在源代码和调用方的成员名称的文件路径. 此信息用于跟踪,调试和创建诊断工具非常有用. 若要获取此信息,则使用适用于可选参数,每个都有一个默认的属性. 下表列出了 System.Runtime.CompilerServices 命名空间中定义的调用方信息属性: 特性 说明 类型 CallerFilePathAttribute 包含调用方源文件的完整路径. 这是文件路径在编译时. Stri

转载:WPF MVVM之INotifyPropertyChanged接口的几种实现方式

原文地址:http://www.cnblogs.com/xiwang/ 序言 借助WPF/Sliverlight强大的数据绑定功能,可以比实现比MFC,WinForm更加优雅轻松的数据绑定.但是在使用WPF/Silverlight绑定时,有件事情是很苦恼的:当ViewModel对象放生改变,需要通知UI.我们可以让VM对象实现INotifyPropertyChanged接口,通过事件来通知UI.但问题就出现这里…… 一,描述问题 情形:现在需要将一个Person对象的Name熟悉双向绑定到UI中

INotifyPropertyChanged, Interface

Data Object(class) impliment INotifyPropertyChanged; then the Object can update BindingSource. Implimentation public abstract class NotifyProperyChangedBase : INotifyPropertyChanged { #region INotifyPropertyChanged Members public event PropertyChange

谈谈INotifyPropertyChanged和ICommand

WPF,Windows8和Windows Phone开发中的MVVM设计模式中很重要的两个接口是INotifyPropertyChanged和ICommand,深入理解这两个接口的原理,并掌握其正确的使用方法,对熟练使用MVVM模式有很大的好处. MVVM模式最大的好处在于使表现层和逻辑层分离,这得益于微软XAML平台的绑定机制,在绑定机制中发挥重要作用的两个接口是INotifyPropertyChanged和ICommand.表现层(View层)是逻辑层(ViewModel层)的高层,所以表现

WPF 数据绑定,界面刷新的两种方法-----INotifyPropertyChanged

.Netformwork4.0及以下版本 -------INotifyPropertyChanged 命名空间: System.ComponentModel 后台代码 public partial class DvrWnd : UserControl { public DvrWnd() { InitializeComponent(); } private void InitInfo() { for (int i = 0; i < 10; i++) { DvrInfo dvrInfo = new

C# INotifyPropertyChanged使用方法

INotifyPropertyChanged 接口:向客户端发出某一属性值已更改的通知. NotifyPropertyChanged 接口用于向客户端(通常是执行绑定的客户端)发出某一属性值已更改的通知. 一般使用地方是:加载数据时,及时更新相应的数据加载名称.操作功能时,及时提示相应的错误信息. 实例: xaml代码: <TextBlock Margin="80,5,80,0" TextWrapping="Wrap" Foreground="Whi

INotifyPropertyChanged接口的实现

何时实现INotifyPropertyChanged接口 官方解释:INotifyPropertyChanged  接口用于向客户端(通常是执行绑定的客户端)发出某一属性值已更改的通知.官方解释的很模糊,估计是个人看了都不知道到底什么时候需要实现INotifyPropertyChanged接口.小梦通过实际测试给出明确结论: 首先:OneTime模式:毫无意义,因为它的绑定只有初始时候绑定一次,根本谈不上改变!自然也就谈不上实现INotifyPropertyChanged接口. 然后是OneWa

WPF系列之三:实现类型安全的INotifyPropertyChanged接口,可以不用“Magic string” 么?

通常实现INotifyPropertyChanged接口很简单,为你的类只实现一个PropertyChanged 的Event就可以了. 例如实现一个简单的ViewModel1类: public class ViewModel1 : INotifyPropertyChanged { private string _data; public string Data { get { return _data; } set { if (_data == value) return; _data = v