每次我们在 setter 中调用PropertyChanged时,MVVM Light中都没有简写形式,类似于flex [Bindable]:
[PropertyChanged]
public bool IsEditable { .... }
为什么我们每次都要编写PropertyChanged(“IsEditable”),它容易出错,因此可以在默认位置编写它。
最佳答案
如果不重写IL插入PropertyChanged
调用,则无法完成此操作。 (或者使用非常慢的代理,并在运行时构建继承的类型)
您正在寻找PostSharp。
您还可以创建引发事件的代码段:
<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>Property With Change Event</Title>
<Shortcut>propc</Shortcut>
<Description>Code snippet for property that calls OnPropertyChanged and XML description</Description>
<Author>SLaks</Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>type</ID>
<ToolTip>Property type</ToolTip>
<Default>string</Default>
</Literal>
<Literal>
<ID>property</ID>
<ToolTip>Property name</ToolTip>
<Default>MyProperty</Default>
</Literal>
<Literal>
<ID>field</ID>
<ToolTip>Backing field name</ToolTip>
<Default>myProperty</Default>
</Literal>
<Literal>
<ID>desc</ID>
<ToolTip>The description of this property</ToolTip>
<Default>...</Default>
</Literal>
</Declarations>
<Code Language="csharp"><![CDATA[$type$ $field$;
///<summary>Gets or sets $desc$.</summary>
public $type$ $property$ {
get { return $field$; }
set { $field$ = value; OnPropertyChanged("$property$"); }
}
$end$]]></Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
关于.net - 为什么在MVVM Light中没有PropertyChanged的简写,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4558341/