【问题标题】:MVVMCross Code Snippets for Visual Studio?Visual Studio 的 MVVMCross 代码片段?
【发布时间】:2013-08-13 04:26:17
【问题描述】:

在哪里可以下载 Visual Studio 的 sn-ps,例如 pf pmvx、cmvx 等? 我虽然可以在 github 项目上找到它们,但找不到它们......

【问题讨论】:

  • SO 不是为了寻找下载链接。试试谷歌。

标签: mvvmcross


【解决方案1】:

我已经创建了自己的。请记住,这些是 ReSharper 的模板。

mvxcom -> 用于命令

#region $region$ command
private MvxCommand _$NAME$Command;

public ICommand $PNAME$Command
{
    get
    {
       _$NAME$Command = _$NAME$Command ?? new MvxCommand(Do$PNAME$Command);
       return _$NAME$Command;
    }
}

private void Do$PNAME$Command()
{
    $END$        
}
#endregion

mvxprop -> 用于属性

#region $region$
private $TYPE$ _$NAME$;
public $TYPE$ $PNAME$
{ 
get { return _$NAME$; }
set { _$NAME$ = value; RaisePropertyChanged(() => $PNAME$); }
}
#endregion
$END$

mvxset -> 绑定集

var set = this.CreateBindingSet<$VIEW$, $VIEW$Model>();
set.Bind($ELEMENT$).To(vm => vm$END$);
set.Apply();

您可以使用 ReSharper>Template Explorer>Live Templates>New Template 将它们添加到您的 ReSharper。

请随意更改它们。

【讨论】:

  • 您好,感谢分享。我不喜欢使用下划线,是否可以设置以小写字母开头的字段名称和以大写字母开头的属性名称(因此它只有一个值 $NAME)?
  • 还有一个问题:在你的脚本属性中,setter 是 1 行,但是在 VS 中它变成了 4 行,是否可以解决这个问题?
  • 对于问题 #1,您可以使用 $NAME 和 $PNAME 并为 $NAME 使用小写字母,但是,以上内容与 Resharper 的默认方案一致。 #2 可能是在您的 VS 中设置的一些配置,以打破超过一定长度的行。对我来说,它总是一行。
  • 创建或编辑 Resharper 模板时,可以选择重新格式化。取消选中它,它将保留原始格式。
【解决方案2】:

这是基于 Aboo 上述回答的原生 VS 版本的 sn-ps。

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>MvvMCross Property</Title>
      <Description>Insert a property block with a backing field and property change notification</Description>
      <Shortcut>mvxprop</Shortcut>
      <Author>Andrew Coates (based on Aboo's SO ReSharper Answer)</Author>
      <HelpUrl>http://stackoverflow.com/questions/18200679/mvvmcross-code-snippets-for-visual-studio</HelpUrl>
    </Header>
    <Snippet>
      <Declarations>
        <Literal>
          <ID>backingfield</ID>
          <ToolTip></ToolTip>
          <Default>propertyName</Default>
        </Literal>
        <Literal>
          <ID>property</ID>
          <ToolTip></ToolTip>
          <Default>PropertyName</Default>
        </Literal>
        <Literal>
          <ID>propertyType</ID>
          <ToolTip></ToolTip>
          <Default>int</Default>
        </Literal>
      </Declarations>
      <Code Language="CSharp">
        <![CDATA[private $propertyType$ $backingfield$;
        public $propertyType$ $property$
        {
          get { return $backingfield$; }
          set { if($backingfield$ == value) return; $backingfield$ = value; RaisePropertyChanged(() => $property$); }
        }
        $end$]]>
      </Code>
    </Snippet>
  </CodeSnippet>
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>MvvMCross Command</Title>
      <Description>Insert a Command declaration for an MvvMCross View Model</Description>
      <Shortcut>mvxcom</Shortcut>
      <Author>Andrew Coates (based on Aboo's SO ReSharper Answer)</Author>
      <HelpUrl>http://stackoverflow.com/questions/18200679/mvvmcross-code-snippets-for-visual-studio</HelpUrl>
    </Header>
    <Snippet>
      <Declarations>
        <Literal>
          <ID>backingfield</ID>
          <ToolTip></ToolTip>
          <Default>commandName</Default>
        </Literal>
        <Literal>
          <ID>Name</ID>
          <ToolTip></ToolTip>
          <Default>CommandName</Default>
        </Literal>
      </Declarations>
      <Code Language="CSharp">
        <![CDATA[private MvxCommand $backingfield$Command;

        public MvxCommand $Name$Command
        {
          get
          {
            $backingfield$Command = $backingfield$Command ?? new MvxCommand(Do$Name$Command);
            return $backingfield$Command;
          }
        }

        private void Do$Name$Command()
        {
          $end$
        }

        ]]>
      </Code>
    </Snippet>
  </CodeSnippet>
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>MvvMCross Binding Set</Title>
      <Description>Create a binding set and bind an element</Description>
      <Shortcut>mvxset</Shortcut>
      <Author>Andrew Coates (based on Aboo's SO ReSharper Answer)</Author>
      <HelpUrl>http://stackoverflow.com/questions/18200679/mvvmcross-code-snippets-for-visual-studio</HelpUrl>
    </Header>
    <Snippet>
      <Declarations>
        <Literal>
          <ID>viewName</ID>
          <ToolTip></ToolTip>
          <Default>viewName</Default>
        </Literal>
        <Literal>
          <ID>element</ID>
          <ToolTip></ToolTip>
          <Default>element</Default>
        </Literal>
      </Declarations>
      <Code Language="CSharp">
        <![CDATA[var set = this.CreateBindingSet<$viewName$View, $viewName$ViewModel>();
        set.Bind($element$).To(vm => vm$end$);
        set.Apply();
        ]]>
      </Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>

【讨论】:

【解决方案3】:

如果我的假设是正确的,那么您指的是 Stuart 在他的 MvvmCross 演示中使用的快捷方式。这些是他使用 ReSharper 编写并分配给快捷方式的代码的 sn-ps,不公开提供,但如果您问得好,它们可以导出和共享。当然,您可以随时使用this tutorial 制作自己的“实时模板”

【讨论】:

  • 是的,你是对的,我说的是那些。我虽然它们已经可用,因为它们是真正的生产力破坏者。 MVVMlight 在他的设置中公开了这一点,我虽然 Cross 也在做同样的事情。希望斯图尔特读到这篇文章并与我们分享另一件事。无论如何,谢谢。
【解决方案4】:

我修改了@Coasty 的答案,加入了一个改编自https://stackoverflow.com/questions/17187113/how-can-i-use-async-in-an-mvvmcross-view-model 的异步命令,并更改了快捷方式,因此它们不再与 mvx 命名空间发生冲突。

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>MvvmCross Property</Title>
      <Description>Insert a property block with a backing field and property change notification</Description>
      <Shortcut>mvvmcrossprop</Shortcut>
      <Author>Andrew Coates (based on Aboo's SO ReSharper Answer)</Author>
      <HelpUrl>https://stackoverflow.com/questions/18200679/MvvmCross-code-snippets-for-visual-studio</HelpUrl>
    </Header>
    <Snippet>
      <Declarations>
        <Literal>
          <ID>backingfield</ID>
          <ToolTip></ToolTip>
          <Default>propertyName</Default>
        </Literal>
        <Literal>
          <ID>property</ID>
          <ToolTip></ToolTip>
          <Default>PropertyName</Default>
        </Literal>
        <Literal>
          <ID>propertyType</ID>
          <ToolTip></ToolTip>
          <Default>int</Default>
        </Literal>
      </Declarations>
      <Code Language="CSharp">
        <![CDATA[private $propertyType$ $backingfield$;
        public $propertyType$ $property$
        {
          get { return $backingfield$; }
          set { $backingfield$ = value; RaisePropertyChanged(() => $property$); }
        }
        $end$]]>
      </Code>
    </Snippet>
  </CodeSnippet>
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>MvvmCross Command</Title>
      <Description>Insert a Command declaration for an MvvmCross View Model</Description>
      <Shortcut>mvvmcrosscom</Shortcut>
      <Author>Andrew Coates (based on Aboo's SO ReSharper Answer)</Author>
      <HelpUrl>https://stackoverflow.com/questions/18200679/MvvmCross-code-snippets-for-visual-studio</HelpUrl>
    </Header>
    <Snippet>
      <Declarations>
        <Literal>
          <ID>backingfield</ID>
          <ToolTip></ToolTip>
          <Default>commandName</Default>
        </Literal>
        <Literal>
          <ID>Name</ID>
          <ToolTip></ToolTip>
          <Default>CommandName</Default>
        </Literal>
      </Declarations>
      <Code Language="CSharp">
        <![CDATA[private MvxCommand $backingfield$Command;

        public MvxCommand $Name$Command
        {
          get
          {
            $backingfield$ = $backingfield$ ?? new MvxCommand(Do$Name$);
            return $backingfield$;
          }
        }

        private void Do$Name$()
        {
          $end$
        }

        ]]>
      </Code>
    </Snippet>
  </CodeSnippet>
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>MvvmCross Async Command</Title>
      <Description>Insert an Async Command declaration for an MvvmCross View Model</Description>
      <Shortcut>mvvmcrossacom</Shortcut>
      <Author>Benjamin Hysell (based on Andrew Coates Command Answer)</Author>
      <HelpUrl>https://stackoverflow.com/questions/18200679/MvvmCross-code-snippets-for-visual-studio</HelpUrl>
    </Header>
    <Snippet>
      <Declarations>
        <Literal>
          <ID>backingfield</ID>
          <ToolTip></ToolTip>
          <Default>commandName</Default>
        </Literal>
        <Literal>
          <ID>Name</ID>
          <ToolTip></ToolTip>
          <Default>CommandName</Default>
        </Literal>
      </Declarations>
      <Code Language="CSharp">
        <![CDATA[private MvxCommand $backingfield$Command;

        public MvxCommand $Name$Command
        {
          get
          {
            $backingfield$ = $backingfield$ ?? new MvxCommand(async () => await Do$Name$());
            return $backingfield$;
          }
        }

        private async Task Do$Name$()
        {
          $end$
        }

        ]]>
      </Code>
    </Snippet>
  </CodeSnippet>
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>MvvmCross Binding Set</Title>
      <Description>Create a binding set and bind an element</Description>
      <Shortcut>mvvmcrossset</Shortcut>
      <Author>Andrew Coates (based on Aboo's SO ReSharper Answer)</Author>
      <HelpUrl>https://stackoverflow.com/questions/18200679/MvvmCross-code-snippets-for-visual-studio</HelpUrl>
    </Header>
    <Snippet>
      <Declarations>
        <Literal>
          <ID>viewName</ID>
          <ToolTip></ToolTip>
          <Default>viewName</Default>
        </Literal>
        <Literal>
          <ID>element</ID>
          <ToolTip></ToolTip>
          <Default>element</Default>
        </Literal>
      </Declarations>
      <Code Language="CSharp">
        <![CDATA[var set = this.CreateBindingSet<$viewName$View, $viewName$ViewModel>();
        set.Bind($element$).To(vm => vm$end$);
        set.Apply();
        ]]>
      </Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>

【讨论】:

    猜你喜欢
    • 2020-09-07
    • 2016-11-17
    • 2011-07-05
    • 1970-01-01
    • 2016-02-20
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多