Wpf 自动创建getter/setter的代码段?
我曾经使用过我在过去看到/发现的一个代码片段,它可以将我的单个语句转换为私有/公共getter/setter,自从重新安装我的机器以来,我一直无法重复这个发现 例如:Wpf 自动创建getter/setter的代码段?,wpf,visual-studio-2010,mvvm-light,Wpf,Visual Studio 2010,Mvvm Light,我曾经使用过我在过去看到/发现的一个代码片段,它可以将我的单个语句转换为私有/公共getter/setter,自从重新安装我的机器以来,我一直无法重复这个发现 例如: private string serverSMTP = string.empty; 然后我可以按Ctrl键k+并将其转换为: private string serverSMTP = string.Empty; public string ServerSMTP { get { ret
private string serverSMTP = string.empty;
然后我可以按Ctrl键k+并将其转换为:
private string serverSMTP = string.Empty;
public string ServerSMTP
{
get { return serverSMTP; }
set
{
serverSMTP = value;
RaisePropertyChanged("ServerSMTP");
}
}
关于如何创建一些东西来实现这一点,或者如何创建一个扩展/代码段来为我处理它,有什么想法吗?在较大的项目中,这将节省我很多时间。请将此片段放在下面:
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets
xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Shortcut>propn</Shortcut>
<Title>
Notify Property
</Title>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>type</ID>
<ToolTip>Type</ToolTip>
<Default>int</Default>
</Literal>
<Literal>
<ID>field</ID>
<ToolTip>Field name</ToolTip>
<Default>fieldName</Default>
</Literal>
<Literal>
<ID>property</ID>
<ToolTip>Propery Name</ToolTip>
<Default>PropertyName</Default>
</Literal>
</Declarations>
<Code Language="CSharp">
<![CDATA[
private $type$ $field$;
public $type$ $property$
{
get { return $field$; }
set
{
if($field$ != value)
{
$field$ = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("$property$"));
}
}
}
$end$]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
支柱
通知财产
类型
类型
int
领域
字段名
字段名
财产
财产名称
属性名
在文件propn.snippet中,在此文件夹中:
C:\Users[您的用户名]\Documents\Visual Studio 2010\Code Snippets\Visual C\My Code Snippets
之后,您将能够使用(propn+tab+tab)快捷方式使用此代码段
代码片段xml很容易自己理解,因此您可以轻松地根据需要对其进行调整。如果您已经在使用MVVM Light framework,您可以安装随附的代码片段,这些代码片段将执行类似的操作。具体地说,“mvvminpc”代码段将执行您正在查找的操作,尽管它不会接受现有字段声明并将其转换为带有propertychanged通知的属性 加快添加新属性的代码片段(仅限Visual Studio):
mvvminpc将新的可绑定属性添加到ViewModel
MVVMLocator属性将新的ViewModel添加到ViewModeLocator
mvvmpropa将新的附加属性添加到DependencyObject(仅限WPF)
mvvmpropdp向DependencyObject(仅限WPF)添加新的依赖项属性
mvvmslpropa将新的附加属性添加到DependencyObject(仅限Silverlight)
mvvmslpropdp向DependencyObject(仅限Silverlight)添加新的依赖项属性
这与mvvm和wpf有关吗?我还没有看到它与setter中的RaisePropertyChanged调用有关。但是,您可能有一个加载项将此行为添加到vs中。抱歉,我帮不了您。。但是我知道您可以这样做:publicstringserversmtp{get;set;}您在任何情况下都不应该引发事件,但只有在属性实际发生更改时,才应该引发事件,所以请选中
字段!=应该完成value
。然后,您可以通过“自动化”此代码片段来节省更多的精力:这不是破坏东西的问题,而是干净的编码,如果有人订阅了一个名为PropertyChanged
的事件,那么该人应该能够假设,如果属性发生了更改,那么该属性将被触发。代码段的工作原理与从头开始创建它一样,但我想采用我已经编写的内容(私有字符串serverSMTP=string.empty并使用该行添加带有所有额外信息的公共getter/setter?此外,您的代码段中有一个竞争条件,PropertyChanged
可以在null检查和调用它之间取消订阅。最好将其分配给一个变量。)。