Wpf 自动创建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

我曾经使用过我在过去看到/发现的一个代码片段,它可以将我的单个语句转换为私有/公共getter/setter,自从重新安装我的机器以来,我一直无法重复这个发现

例如:

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检查和调用它之间取消订阅。最好将其分配给一个变量。)。