Io uso lo snippet per Visual Studio, che genera proprietà con archiviazione di backup e event raising per me. È sufficiente creare il file XML con il nome propchanged
(o un altro nome, se lo si desidera) e seguente contenuto:
<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>propchanged</Title>
<Shortcut>propchanged</Shortcut>
<Description>Code snippet for property (with call to OnPropertyChanged) and backing field</Description>
<Author>lazyberezovsky</Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>type</ID>
<ToolTip>Property type</ToolTip>
<Default>string</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
{
if ($field$ == value)
return;
$field$ = value;
OnPropertyChanged("$property$");
}
}
$end$]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
E metterlo nella cartella C:\Users\YourName\Documents\Visual Studio 2010\Code Snippets\Visual C#\My Code Snippets\
.
Successivamente, eredito il mio ViewModels da qualche base ViewModel, che implementa l'interfaccia INotifyPropertyChanged
e fornisce il metodo protetto OnPropertyChanged
per generare l'evento `PropertyChanged '.
public class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName);
}
}
Ora, quando si digita propchanged
in Visual Studio, vi verrà chiesto per tipo di proprietà e il nome, e generare codice per voi.
public class PersonViewModel : ViewModel
{
// type here 'propchanged' (or other shortcut assigned for snippet)
}
UPDATE:
Un'altra opzione genera codice framework AOP come PostSharp. In questo caso il codice verrà generato e aggiunto durante la compilazione (quindi le tue classi rimarranno pulite). Here è esempio di implementazione INotifyProperty modificata tramite PostSharp attributi:
[Notify]
public class PersonViewModel
{
public Jurisdiction CountryResidence { get; set; }
public Jurisdiction CountryBirth { get; set; }
}
fonte
2012-04-16 13:22:55
+1 per aver coniato la frase "Codice monotono"! Dovrò usare quello. – Zannjaminderson
Se si utilizza C# 5, è possibile sbarazzarsi di alcuni codici standard con nuovi attributi.Vedi qui: http://bhrnjica.net/2012/03/18/new-feature-in-c-5-0-callermembername/ – Vlad
@Vlad Grazie, questo sembra pulito. In questo caso però tutto il C# 5 mi dà la possibilità di rimuovere la stringa da "OnPropertyChanged", giusto? – Oliver