Фрагменты кода MVVMCross для Visual Studio?

Где можно загрузить фрагменты для Visual Studio, понравятся pf pmvx, cmvx и другие? Я, хотя они будут доступны в проектах github, но не могут их найти...

Ответ 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, используя ReSharper > Template Explorer > Live Templates > New Template.

Пожалуйста, не стесняйтесь изменять их, как вам хочется.

Ответ 2

И здесь на родной версии VS-фрагментов, основанных на ответе Aboo выше.

<?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 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 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 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

Если я прав в своей презумпции, вы имеете в виду ярлыки, которые Стюарт использует в своих демонстрационных версиях для MvvmCross. Это фрагменты кода, который он написал и назначил ярлыкам с помощью ReSharper и не являются общедоступными, хотя если вы спросите, что они могут быть экспортированы и распространены. Конечно, вы всегда можете создать свой собственный "Живой шаблон", используя этот учебник

Ответ 4

Я изменил @Coasty ответ, чтобы включить команду async, адаптированную из fooobar.com/info/227394/... и изменили ярлыки, чтобы они больше не сталкивались с пространствами 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 SO ReSharper Answer)</Author>
      <HelpUrl>https://stackoverflow.com/info/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 SO ReSharper Answer)</Author>
      <HelpUrl>https://stackoverflow.com/info/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/info/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 SO ReSharper Answer)</Author>
      <HelpUrl>https://stackoverflow.com/info/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>