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

2024-03-31

我发现自己最近编写了很多样板 MVVM 代码,并且想知道是否有一种奇特的方法可以绕过编写所有这些代码?我已经使用了ViewModelBase实现的类INotifyPropertyChanged但这并不能解决必须编写所有访问器代码等的问题。也许通过编写一个自定义属性来执行此操作,或者通过模板系统?

public MyClass : ViewModelBase
{
    private int someVariable;

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

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

我有一个用于创建视图模型属性的片段。这个特定的片段使用Expression<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类为我完成属性通知和验证的繁重工作。

用法是这样的:

  1. Type propvm
  2. Hit TAB twice
  3. 填写突出显示的字段,然后按 Tab 键翻到下一个!

演练:创建代码片段 http://msdn.microsoft.com/en-us/library/ms165394%28v=vs.110%29.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编写 MVVM 样板代码的更好方法? 的相关文章

  • WPF DataGrid 验证/绑定模式错误

    我创建了一个非常简单的新项目 仅测试 Microsoft WPF DataGrid 行为 不涉及其他 我只使用标准的 DataGrid
  • 以编程方式读取 SQL Server 查询计划建议的 SQL 特定执行的索引?

    如果我在 SSMS 中运行此命令 set showplan xml on GO exec some procedure arg1 arg2 arg3 GO set showplan xml off GO 我获得查询执行中涉及的完整调用堆栈的
  • 在c#中执行Redis控制台命令

    我需要从 Redis 控制台获取 客户端列表 输出以在我的 C 应用程序中使用 有没有办法使用 ConnectionMultiplexer 执行该命令 或者是否有内置方法可以查找该信息 CLIENT LIST是 服务器 命令 而不是 数据库
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • 如何使用 Castle Windsor 将对象注入到 WCF IErrorHandler 实现中?

    我正在使用 WCF 开发一组服务 该应用程序正在使用 Castle Windsor 进行依赖注入 我添加了一个IErrorHandler通过属性添加到服务的实现 到目前为止一切正常 这IErrorHandler对象 一个名为FaultHan
  • Visual Studio 在构建后显示假错误

    我使用的是 Visual Studio 2017 构建后 sln在调试模式下 我收到错误 但是 当我通过双击错误列表选项卡中的错误来访问错误时 错误会从页面中消失 并且错误数量也会减少 我不太确定这种行为以及为什么会发生这种情况 有超过 2
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • 为什么从字典中获取时会得到 Action<> 的克隆?

    我有以下字典 private Dictionary
  • 为什么这个二维指针表示法有效,而另一个则无效[重复]

    这个问题在这里已经有答案了 这里我编写了一段代码来打印 3x3 矩阵的对角线值之和 这里我必须将矩阵传递给函数 矩阵被传递给指针数组 代码可以工作 但问题是我必须编写参数的方式如下 int mat 3 以下导致程序崩溃 int mat 3
  • C++ int 前面加 0 会改变整个值

    我有一个非常奇怪的问题 如果我像这样声明一个 int int time 0110 然后将其显示到控制台返回的值为72 但是当我删除前面的 0 时int time 110 然后控制台显示110正如预期的那样 我想知道两件事 首先 为什么它在
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • String.Empty 与 "" [重复]

    这个问题在这里已经有答案了 可能的重复 String Empty 和 有什么区别 https stackoverflow com questions 151472 what is the difference between string
  • 可访问性不一致:参数类型的可访问性低于方法

    我试图在两个表单之间传递一个对象 基本上是对当前登录用户的引用 目前 我在登录表单中有一些类似的内容 private ACTInterface oActInterface public void button1 Click object s
  • 使用 omp_set_num_threads() 将线程数设置为 2,但 omp_get_num_threads() 返回 1

    我有以下使用 OpenMP 的 C C 代码 int nProcessors omp get max threads if argv 4 NULL printf argv 4 s n argv 4 nProcessors atoi argv
  • GCC 的“-Wl,option”和“-Xlinker option”语法之间有区别吗?

    我一直在查看一些配置文件 并且看到它们都被使用 尽管在不同的体系结构上 如果您在 Linux 机器上使用 GCC 将选项传递给链接器的两种语法之间有区别吗 据我所知 阅读 GCC 手册时 他们的解释几乎相同 From man gcc Xli
  • 我可以在“字节数”设置为零的情况下调用 memcpy() 和 memmove() 吗?

    当我实际上没有什么可以移动 复制的时候 我是否需要处理这些情况memmove memcpy 作为边缘情况 int numberOfBytes if numberOfBytes 0 memmove dest source numberOfBy
  • 是否可以在不连接数据库的情况下检索 MetadataWorkspace?

    我正在编写一个需要遍历实体框架的测试库MetadataWorkspace对于给定的DbContext类型 但是 由于这是一个测试库 我宁愿不连接到数据库 它引入了测试环境中可能无法使用的依赖项 当我尝试获取参考时MetadataWorksp

随机推荐

  • windows下无法使用mingw/gdb在eclipse helios cdt上调试小程序,控制台冻结

    我一直在尝试使用 Eclipse CDT 来做一些 C 示例 我可以使用 run 命令很好地运行它们 但是每当我尝试调试时 控制台窗口就会冻结 我可以输入 但程序不运行不继续了 当我调试时 我在控制台窗口上得到以下输出 没有断点 但由于默认
  • 如何获取没有0x00或0xFF字节的x86_64中的指令指针?

    有没有一种方法可以在不使用指令指针 RIP 的情况下访问指令指针 RIP 中的值call随后是一个pop用汇编语言 或者是否有机器代码操作码可以做到这一点 我一直在谷歌搜索没有明确的结果 我的问题是机器代码中不能有任何零 否则我会收到 SI
  • 故事板继续导致内存泄漏

    I have two UIViewControllers with buttons triggering segue modal to each other I wanted to discover if that s causing an
  • LiveData 在第一次回调后删除观察者

    收到第一个结果后如何删除观察者 下面是我尝试过的两种代码方式 但即使我删除了观察者 它们仍然会不断接收更新 Observer observer new Observer
  • 用于从 LOB 数据类型的 Oracle 数据库检索大字符串的 Java 类

    拥有一个 Oracle 数据库 其字段之一设置为 LOB 大对象 数据类型 当我运行 select 语句时 会抛出此错误 ERROR ORA 22835 Buffer too small for CLOB to CHAR or BLOB t
  • 从芯片组中获取选定的芯片[重复]

    这个问题在这里已经有答案了 我是在 Android 中使用 Chips 的新手 我想在单击按钮时从 ChipGroup 中获取选定的 Chip Made 是以某种方式检查每个 Chip 并将其添加到 Set 中 但希望使其更加高效 不知何故
  • python/genshi 换行符到 html

    段落

    我试图用 genshi 输出评论的内容 但我不知道如何将换行符转换为 HTML 段落 这是一个测试用例 它应该是什么样子 input foo n n n n nbar nbaz output p foo p p bar p p baz p
  • 在Linux中使用循环更改目录

    我想更改目录以在每个目录中执行任务 以下是代码 for i in 1 10 do cd dir subdir i bla bla bla done 但是我收到错误 not found No such file or directory 我已
  • 如何处理和包含标头和库以在不同计算机上构建 Visual Studio 2010 解决方案

    我有一个 Visual Studio 2010 解决方案 需要包含 4 个不同的第三方库和标头 这些第三方依赖项在包含之前会单独安装 所以头文件和库的包含路径在不同的机器上是不同的 现在 我想要的是让不同的开发人员在不同的机器上构建我的解决
  • 处理非重叠范围的建议方法(例如调度)

    我已经见过几次此类问题 并且正在尝试确定以非重叠方式存储范围的最佳方式 例如 当调度某种一次只有一个人可以使用的资源时 我所看到的大多是这样的 PERSON ROOM START TIME END TIME Col Mustard Libr
  • JSP中如何获取HTTP post参数

    I am new to JSP I have a jsp page where a parameter is passed to this jsp page with http post I can see the parameter in
  • 操作无法完成。 (com.facebook.sdk 错误 2。)ios6

    您好 我正在使用 ios 6 进行 facebook 登录 并且我收到此错误作为本机弹出窗口 操作无法完成 com facebook sdk 错误 2 这是我使用的场景 我在模拟器上运行这个 我已通过设置登录 Facebook 应用程序 并
  • .NET 4 中的延迟初始化

    什么是延迟初始化 这是我在谷歌搜索后得到的代码 class MessageClass public string Message get set public MessageClass string message this Message
  • 将 maven-release-plugin 与 git-1.8.5 一起使用

    当使用 git 1 8 5 maven release plugin 使用版本 2 4 2 和 2 3 2 测试 和 mvn 使用版本 3 1 1 和 3 0 5 测试 时 运行mvn release prepare and mvn rel
  • R xts 对象将 xts 对象子集为特定小时内多天的日内数据

    xts 对象中有没有办法执行与下面相同的操作 但对于具有多天日内数据的 xts 对象 下面的工作原理就像一个时钟 但只显示一天的数据 如果我从 22 号到 26 号通过 xts 它就不会 似乎无法一次性完成多天 xts 中的日内数据子集化
  • 在 Spark 中堆叠 ML 算法

    是否有 Spark api 可以在 Spark 中构建堆叠集成 或者应该从头开始构建它们 我在网上没有找到有关此主题的任何资源 正如 AKSW 的评论中所说 在当前的 Apache Spark MLlib 中 Ensemble Models
  • 在打字稿中使用react-redux连接

    我尝试使用 redux 和 react router dom 在 typescript 中构建一个 React 应用程序 当我将 redux 添加到我的应用程序时 我遇到了打字问题 因此 我创建了以下只有一页的最小示例测试页 App jsx
  • 关于比奈公式的一些知识

    为什么比奈公式 O LogN 但不完全是 在时间上比迭代方法 O n 效果更差 static double SQRT5 Math Sqrt 5 static double PHI SQRT5 1 2 public static int Bi
  • 使用nl2br将textarea新行保留到mysql...如何很好地将数据返回到文本框?

    我有一个带有文本区域的表单 其结果被插入到 mysql 数据库中 我使用 nl2br 来保留换行符 但是 因为这会在文本中插入 br 所以当用户去编辑他们在文本区域中输入的内容时 它会显示文本区域中保存在 mysql 中的所有 br 对于不
  • 编写 MVVM 样板代码的更好方法?

    我发现自己最近编写了很多样板 MVVM 代码 并且想知道是否有一种奇特的方法可以绕过编写所有这些代码 我已经使用了ViewModelBase实现的类INotifyPropertyChanged但这并不能解决必须编写所有访问器代码等的问题 也