Есть ли способ автоматически сгенерировать эти готовые свойства привязки данных для моего класса? - PullRequest
1 голос
/ 14 декабря 2011

Я пишу приложение winforms, использующее привязку данных в C #. Недавно я обнаружил, что пишу много свойств, таких как код, показанный ниже. Это нормально - писать этот код, но я думаю, что, может быть, я что-то упустил, может быть, я мог бы меньше кодировать и сделать код более чистым?

Есть ли автоматизированный способ сделать это?
Как Codedom или какие-либо рамки, которые я не знаю?

public class SampleClass : INotifyPropertyChanged
{
    public Boolean Enabled
    {
        get { return _enabled; }
        set
        {
            if (_enabled == value) return;

            _enabled = value;

            // broadcast the change
            RaisePropertyChanged(PropertyName_Enabled);

            // this object is modified
            this.Modified = true;
        }
    }

    public Single Degree
    {
        get { return _degree; }
        set
        {
            if (_degree == value) return;

            _degree = value;

            // broadcast the change
            RaisePropertyChanged(PropertyName_Degree);

            // this object is modified
            this.Modified = true;
        }
    }

    // Define the property name this class exposes and notifies
    public static readonly String PropertyName_Enabled = "Enabled";
    public static readonly String PropertyName_Degree = "Degree";

    private Boolean _enabled;
    private Single _degree;    
}    

1 Ответ

1 голос
/ 14 декабря 2011

Просто создайте фрагмент кода :

<?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>propnot</Title>
      <Author>Thomas Levesque</Author>
      <Description>Code snippet for property with change notification</Description>
      <HelpUrl>
      </HelpUrl>
      <Shortcut>propnot</Shortcut>
    </Header>
    <Snippet>
      <Declarations>
        <Literal Editable="true">
          <ID>type</ID>
          <ToolTip>Property type</ToolTip>
          <Default>int</Default>
          <Function>
          </Function>
        </Literal>
        <Literal Editable="true">
          <ID>property</ID>
          <ToolTip>Property name</ToolTip>
          <Default>MyProperty</Default>
          <Function>
          </Function>
        </Literal>
        <Literal Editable="true">
          <ID>field</ID>
          <ToolTip>The variable backing this property</ToolTip>
          <Default>myProperty</Default>
          <Function>
          </Function>
        </Literal>
        <Literal Editable="true">
          <ID>notifyMethod</ID>
          <ToolTip>The method used to notify the listeners</ToolTip>
          <Default>OnPropertyChanged</Default>
          <Function>
          </Function>
        </Literal>
      </Declarations>
      <Code Language="csharp"><![CDATA[private $type$ $field$;
public $type$ $property$
{
    get { return $field$;}
    set
    {
        $field$ = value;
        $notifyMethod$("$property$");
    }
}
$end$]]></Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>

(это не совсем то же самое, что код, который вы показали, но вы можете легко адаптировать его к вашим точным потребностям)

Конечно, код не будет выглядеть чище, но, по крайней мере, вы потратите меньше времени на его написание;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...