.net - 为什么在MVVM Light中没有PropertyChanged的简写

标签 .net mvvm mvvm-light

每次我们在 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/

相关文章:

c# - stream 不支持并发 IO 读写操作

c# - 三元最佳实践

ios - 从 ViewController 访问编程 View ?

c# - 使用 Caliburn Micro 和 Silverlight 从文件服务器加载图像

c# - 在WPF-MVVM中的“当前窗口”中保存并关闭

c# - 使用 LINQ 替换循环是否明智?

wpf - WPF 中不存在另一个名称的问题

mvvm - TextBox.Text 单向绑定(bind)不响应 ViewModel 更新背后的代码

mvvm-light - 设计模式下不显示数据

C# 表达式返回 TSQL 包含关键字