2017-05-02 9 views
2

사용자에게 많은 정보를 표시하는 WPF 프로젝트에서 Visual Studio '17 및 Resharper를 사용하고 있습니다. 따라서 다음과 같은 속성을 많이 사용합니다.WPF Viewmodel 속성 생성을 자동화하는 방법

private double _foo; 
public double Foo 
{ 
    get { return _foo; } 
    set { SetProperty(ref _foo, value); } 
} 

나는 이것을 만드는 빠른 자동 방법을 찾고 있습니다. 지금 내가 입력 '소품'과 'Alt 키 입력'이

public double Foo {get; set;} 

히트를 얻을 - 얻기 위해 '백업 필드 프로퍼티에'>이

private double _foo; 
public double Foo 
{ 
    get { return _foo; } 
    set { _foo = value); } 
} 

후 수동으로합니다 (하는 SetProperty를 입력 ref 및 ','를 사용하여 최종 결과를 얻을 수 있습니다. 스 니펫을 설정하고 템플릿을 재구성하려고했지만 한 번에 수행하는 방법을 파악할 수 없습니다.이 작업을 쉽게하기 위해 사람들이 무엇을 생각해 냈습니까? 이미 존재하는 자동 속성을 View Model 속성으로 변경할 수 있다면 엄청난 도움이 될 것입니다.

+1

사람들은 그들이 뷰 모델 속성있어, 종속성 속성이 아닌. [여기에 내가 사용하는 발췌 문장이 있습니다] (https://swissarmycrowbar.wordpress.com/2016/07/19/viewmodel-property-snippets-c6/). 나는 의존성 속성 스 니펫을 가지고있다. –

+2

유형 "Dep"와 탭을 누른 다음 resharper –

+0

을 사용하여 종속성 속성을 가져옵니다. get get을 닫으십시오. 그러나 제가 목표로 삼고 자하는 것에 대해 약간의 질문을 명확히해야했습니다. 질문은 내가 찾고있는 것을 반영하도록 편집되었습니다. – PlTaylor

답변

2

당신은 정확하게 사용자의 요구에 맞게 자신의 코드를 정의 할 수 있습니다.

<?xml version="1.0" encoding="utf-8"?> 
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> 
    <CodeSnippet Format="1.0.0"> 
    <Header> 
     <Title>INPCProperty</Title> 
     <Author>Peter Duniho</Author> 
     <Description>Property declaration for NotifyPropertyChangedBase</Description> 
     <Shortcut>inpcprop</Shortcut> 
    </Header> 
    <Snippet> 
     <Declarations> 
     <Literal> 
      <ID>fieldName</ID> 
      <Default>_fieldName</Default> 
      <ToolTip>Enter actual field name here</ToolTip> 
     </Literal> 
     <Literal> 
      <ID>fieldType</ID> 
      <Default>object</Default> 
      <ToolTip>Enter actual field value type here</ToolTip> 
     </Literal> 
     </Declarations> 
     <Code Language="CSharp"> 
     <![CDATA[private $fieldType$ $fieldName$; 
     public $fieldType$ FieldName 
     { 
      get { return $fieldName$; } 
      set { _UpdateField(ref $fieldName$, value); } 
     }]]> 
     </Code> 
    </Snippet> 
    </CodeSnippet> 
</CodeSnippets> 

사용은 Visual Studio 코드 조각 관리자를 설치에 스 니펫을 추가 :

여기에 나는 또한 정기적으로 사용 나는 INotifyPropertyChanged 기본 클래스 구현과 호환 속성 구현을 생성하기 위해, 자신을 위해 쓴 하나입니다.

(속성 이름 자체에 필드를 추가하지 않아도 아무런 문제가 없었기 때문에 마음에 들지 않았습니다. 그러나 원하는 경우 물론 선택할 수 있습니다.) 속성 이름과 과도하게 타이핑하면 입력란이 지나치게 타이핑되기 전에 Tab 키를 사용하여 직접 입력 할 수 있어야합니다.

0

U는 자신 만의 스 니펫을 만들 수 있습니다. BindableBase (PRISM) 속성에 propbb 스 니펫을 만들었습니다. 원하는대로 동일하게 구현했습니다. 여기에 스 니펫을 만들려면 내가 따라온 비디오입니다. 방금 (비디오에 내가 제공 한 것처럼)

시각적 스튜디오에 포함이 내 조각입니다하려는 경우

https://www.youtube.com/watch?v=tGmXlUFMTpk

내 조각이

<?xml version="1.0" encoding="utf-8" ?> 
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> 
    <CodeSnippet Format="1.0.0"> 
    <Header> 
     <Title>propbb</Title> 
     <Shortcut>propbb</Shortcut> 
     <Description>Code snippet for BindableBase property and backing field</Description> 
     <Author></Author> 
     <SnippetTypes> 
     <SnippetType>Expansion</SnippetType> 
     </SnippetTypes> 
    </Header> 
    <Snippet> 
     <Declarations> 
     <Literal> 
      <ID>type</ID> 
      <ToolTip>Property type</ToolTip> 
      <Default>int</Default> 
     </Literal> 
     <Literal> 
      <ID>property</ID> 
      <ToolTip>Property name</ToolTip> 
      <Default>MyProperty</Default> 
     </Literal> 
     <Literal> 
      <ID>field</ID> 
      <ToolTip>The variable backing this property</ToolTip> 
      <Default>myVar</Default> 
     </Literal> 
     </Declarations> 
     <Code Language="csharp"> 
     <![CDATA[private $type$ $field$; 
        public $type$ $property$ 
        { 
        get { return $field$;} 
         set { SetProperty(ref $field$ , value);} 
        } 
    $end$]]> 
     </Code> 
    </Snippet> 
    </CodeSnippet> 
</CodeSnippets> 

처럼 보인다 propbb snippet download

VS2017에 스 니펫 추가 경로 : C : \ Program 비주얼 C# \ 1033 \ 전문가 \ VC# \ 조각 \ 마이크로 소프트 비주얼 스튜디오 \ 2017 \ 파일이 (86) 내 보관함에서 조각을 다운로드하고이 복사 내 Visual Commander 확장으로 propbb 및 탭 탭

0

쓰기 사용하는, 다음 C# 명령을 사용할 수 있습니다 (참조 : Microsoft.비주얼 사령관 Professional을

public class C : VisualCommanderExt.ICommand 
{ 
    public void Run(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package) 
    { 
     string propertyName = Microsoft.VisualBasic.Interaction.InputBox("Property name", "Create view model property [1/2]", "Foo", -1, -1); 
     string propertyType = Microsoft.VisualBasic.Interaction.InputBox("Property type", "Create view model property [2/2]", "double", -1, -1); 
     string fieldName = "_" + System.Char.ToLower(propertyName[0]) + propertyName.Substring(1); 
     string snippet = @" 
private {1} {2}; 
public {1} {0} 
{{ 
    get {{ return {2}; }} 
    set {{ SetProperty(ref {2}, value); }} 
}} 
"; 
     EnvDTE.TextSelection ts = DTE.ActiveDocument.Selection as EnvDTE.TextSelection; 
     ts.Text = string.Format(snippet, propertyName, propertyType, fieldName); 
    } 
} 

C# 6은 간단하다으로하지만 필요합니다 : 비주얼 베이직)은보기 모델 속성을 만들 수

public class C : VisualCommanderExt.ICommand 
{ 
    public void Run(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package) 
    { 
     string propertyName = Microsoft.VisualBasic.Interaction.InputBox("Property name", "Create view model property [1/2]", "Foo", -1, -1); 
     string propertyType = Microsoft.VisualBasic.Interaction.InputBox("Property type", "Create view model property [2/2]", "double", -1, -1); 
     string fieldName = "_" + System.Char.ToLower(propertyName[0]) + propertyName.Substring(1); 

     EnvDTE.TextSelection ts = DTE.ActiveDocument.Selection as EnvDTE.TextSelection; 
     ts.Text = [email protected]" 
private {propertyType} {fieldName}; 
public {propertyType} {propertyName} 
{{ 
    get {{ return {fieldName}; }} 
    set {{ SetProperty(ref {fieldName}, value); }} 
}} 
"; 
    } 
}