ViewModel中C# Property自动添加OnPropertyChanged处理的小工具, 以及相应Python知识点

摘要:
在WPFMVVM中,经常会遇到一些Model和ViewModel属性添加私有字段并更改通知方法以支持绑定。因此,我编写了一个python小工具,用于添加私有字段和更改方法通知。因为这是第一次使用python,所以在中间有一些知识点。1) 用#注释代码,例如:#version:12)使用Import导入其他库,例如:importre3)re是正则表达式库,sutil是复制或备份文件库4)类定义,例如:classYourClassName:5)构造方法定义,例如,def__init__:6)方法定义,如:defYourMethodName:7)self类似于c中的this指针,c++8)python中的正则表达式字符串可以与“?”一起使用?
在做WPFMVVM中经常会遇到一些Model、ViewModel的属性添加添加私有字段和更改通知方法来支持Binding。

比如把:
public class Test
{
     public string TestData1{get; set;}
     public string TestData2{get;set;}
}

变为:
public class Test : INotifyPropertyChanged
{
    private string _testData1;
     public string TestData1
     {
          get{return _testData1;}
          set
          {
               _testData1 = value;
               OnPropertyChanged("TestData1");
          }
     }

     private string _testData2;
     public string TestData2
     {
          get{return _testData2;}
          set
          {
               _testData2 = value;
               OnPropertyChanged("TestData2");
          }
     }
}

上述工作如果在遇到很多属性时, 会太累,而且容易出错。

因此, 我写了一个python的小工具,专门处理添加私有字段和更改方法通知的添加。

由于是第一次用python,中间有些知识点记下来。

1)用#注释代码, like:#version:1
2)用import导入其他库, like:import re
3) re是正则表达式库,shutil是copy或者备份文件的库
4)class的定义, like:class YourClassName:
5)构造方法的定义, like:def __init__(selft, yourParameter):
6) 方法的定义, like:def YourMethodName(self, yourParameter):
7) self类似c、c++中的this指针
8)python中的正则表达式字符串可以用?P<your_key>来标记一个符合的值, like:
pattern = "((?P<space>s*)publics+"
testData = "    public "
m = re.match(pattern, testData)
print(m.group('space')

如果一个测试数据的开头有很多空格等符合s*条件的, 我们可以用space作为关键字来索引到具体空格。此示例中为4个空格
9)字符串的格式化可以用“%(your_key)s”%{'your_key':your_value}, like:
self.classPattern = "(s*publics+%(class)ss+%(derived)ss+%(colon)s+s*%(base)s)"%{'class':"class", 'derived':"w+", 'colon':":", 'base':self.baseClassName}
10)如果字符串跨行, 请在字符串行尾加上
11)re.match()返回值若不匹配则为None
12)可以将正则表达式的匹配结果转为字典, like:
m = re.match(pattern, testData)
yourDict = m.groupdict()
13)可以用raise Exception("Your exception information")来抛出异常
14)用lower()来将字符串转为小写
15)用replace(old, new, length)来替换字符串, 并且可以指定替换几个
16)用input()可以接受控制台输入
17)if,else,for语句的定义:
if methodName == "":
     methodName = "OnPropertyChanged"
for line in fileBackup:
     print("Line is: %s"%line)
18)文件操作有open,write,close等方法, 其中open接受打开的方式, 比如“r+"代表为可读写, "w+"代表先清空源文件(若存在)再读写
19)可以用cxfreeze来打包py为exe文件,安装cxfreeze后,打开命令行进入python路径:C:Python33Scripts, 使用cxfreeze PropertyChanged.py --install-dir=D:/OnPropertyChanged

运行成功后,OnPropertyChanged目录下会有exe,python33.dll以及相关依赖的pyd文件

download:http://sourceforge.net/projects/cx-freeze/?source=dlp
20)另外发现TortoiseGit和Sublime Text很好用。

免责声明:文章转载自《ViewModel中C# Property自动添加OnPropertyChanged处理的小工具, 以及相应Python知识点》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇移动端可视化框架antv f2出现两个legend选项单一职责原则下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

js引用类型赋值不改变原对象值

在JS中,对象的赋值是指默认情况下的赋值。如果更改指定对象,原始对象也将更改。如果要复制赋值,需要重新分配对象:vara={'name':'zhangsan'};varb=对象。分配b、 name='lisi';这样,原始对象的下一层的值不会更改,但如果对象中存在对象,下一层也会更改下一层中的原始对象。处理两个对象的相关性有一个简单而激烈的问题:obj1={...

微信小程序知识点总结--组件

aspectFill缩放模式保持缩放图像的纵横比,并且只能完全显示图像的短边。也就是说,图片通常只在水平或垂直方向上是完整的,而另一个方向会被截取。...

websphere application server (was) 安装8.5.5.18

目录环境准备所需的软件或系统版本安装包目录结构安装步骤安装was8.5.0.0升级到8.5.5.18打开浏览器以访问控制台环境准备如果系统主机名不是localhost,您需要将所需的软件或系统版本jdk1.8centos7.5WAS提前添加到/etc/hosts/文件中_ ND_V8.5_1_OF_3.zipWAS_ ND_V3.5_2_OF_3.zip代理...

硬中断与软中断的区别!

在多核系统上,一个中断通常只能中断一个CPU(也有一种特殊情况,即主机上有一个硬件通道。它可以在没有主CPU支持的情况下同时处理多个中断。软中断:1。软中断与硬中断非常相似。生成软中断的进程必须是当前正在运行的进程,因此它们不会中断CPU。...

uniapp之页面间传递和接收数组

uni-app如何在页面之前发送和传递数组?如果阵列是直接发送和传递的,则收到的消息如下所示。无法获取更多的对象值。接收数组对象的参数。您可以首先将数组转换为JSON字符串,然后在将其传递到页面后将其解析为JavaScript对象。...

Java 安全之:csrf攻击总结

最近,我在维护一些旧项目。在调试期间,我发现请求被反复拒绝。我仔细查看了项目的源代码,发现存在csrftoken验证。我借此机会了解了csrf攻击,并将其总结成一篇论文。受攻击的网站无法阻止攻击。在整个过程中,攻击者无法获取受害者的登录凭据,只能“冒充”。CSRF攻击成功,因为服务器将攻击者发送的请求误认为是用户的请求。服务器通过验证请求是否携带正确的令牌来...