加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 编写MVVM样板代码的更好方法?

发布时间:2020-12-15 07:54:02 所属栏目:百科 来源:网络整理
导读:我发现自己最近编写了大量的样板MVVM代码,并想知道是否有一种奇特的方式可以解决所有问题?我已经使用了实现INotifyPropertyChanged的ViewModelBase类,但这并没有解决必须编写所有访问器代码等问题.也许是通过编写一个自定义属性来执行此操作,还是通过模板系
我发现自己最近编写了大量的样板MVVM代码,并想知道是否有一种奇特的方式可以解决所有问题?我已经使用了实现INotifyPropertyChanged的ViewModelBase类,但这并没有解决必须编写所有访问器代码等问题.也许是通过编写一个自定义属性来执行此操作,还是通过模板系统?
public MyClass : ViewModelBase
{
    private int someVariable;

    public int SomeVariable
    {
        get
        {
            return this.someVariable;
        }

        set
        {
            this.someVariable = value;
            this.NotifyPropertyChanged("SomeVariable");
        }
    }
}

解决方法

我有一个片段,用于创建我的视图模型属性.该特定片段使用表达式< Func< T>>其他评论者暗示的符号.
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <SnippetTypes>
        <SnippetType>Expansion</SnippetType>
      </SnippetTypes>
      <Title>View Model Property</Title>
      <Description>
          Declares a property and member suitable for Viewmodel implementation.
      </Description>
      <HelpUrl>
      </HelpUrl>
      <Shortcut>propvm</Shortcut>
    </Header>
    <Snippet>
      <Declarations>
        <Literal Editable="true">
          <ID>propname</ID>
          <ToolTip>Property Name</ToolTip>
          <Default>Name</Default>
          <Function>
          </Function>
        </Literal>
        <Literal Editable="true">
          <ID>type</ID>
          <ToolTip>Property type.</ToolTip>
          <Default>Type</Default>
          <Function>
          </Function>
        </Literal>
        <Literal Editable="true">
          <ID>init</ID>
          <ToolTip>Member initialisation</ToolTip>
          <Default>null</Default>
          <Function>
          </Function>
        </Literal>
      </Declarations>
      <Code Language="csharp" Kind="type decl"><![CDATA[public $type$$propname$
{
    get { return m_$propname$; }
    set 
    { 
        m_$propname$= value;
        base.OnPropertyChanged(() => $propname$);
    }
} $type$m_$propname$= default($type$);$end$]]></Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>

请注意对base.PropertyChanged()的调用.我有一个ViewModelBase类来为我做繁重的属性通知和验证.

用法是这样的:

>输入propvm
>按两次TAB
>填写突出显示的字段,然后按Tab键翻转到下一个字段!

Walkthrough : Creating a code snippet

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读