{"id":57035,"date":"2021-10-30T09:07:28","date_gmt":"2021-10-30T07:07:28","guid":{"rendered":"https:\/\/ar3dp.de\/docs\/programmieren\/csharp\/viewmodelbase-beispiel\/"},"modified":"2021-10-30T09:07:28","modified_gmt":"2021-10-30T07:07:28","slug":"viewmodelbase-beispiel","status":"publish","type":"docs","link":"https:\/\/ar3dp.de\/en\/docs\/programmieren\/csharp\/viewmodelbase-beispiel\/","title":{"rendered":"ViewModelBase-Beispiel"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Das ViewModel bildet die Logik hinter der View (Benutzerinterface). Folgend findest du ein kleines Beispiel, wie du ein ViewModel aufbauen kannst, so dass es dem MVVM-Designmuster entspricht.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">ViewModelBase<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Es empfiehlt sich, eine Basis-Klasse f\u00fcr deine ViewModel&#8217;s zu erstellen. So kann jedes weitere ViewModel von dieser Klasse erben. Die Basis-Klasse kann wie folgt aussehen und nach belieben erweitert oder angepasst werden.<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csharp&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;TrpContentRestriction&quot;:{&quot;restriction_type&quot;:&quot;exclude&quot;,&quot;selected_languages&quot;:[],&quot;panel_open&quot;:true},&quot;language&quot;:&quot;C#&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;csharp&quot;}\">public abstract class ViewModelBase : INotifyPropertyChanged\n{\n    #region OnPropertyChanged\n\n    public event PropertyChangedEventHandler PropertyChanged;\n\n    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)\n    {\n        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n    }\n\n    protected bool SetValue&lt;T&gt;(ref T backingField, T value, [CallerMemberName] string propertyName = &quot;&quot;)\n    {\n        if (object.Equals(backingField, value))\n        {\n            return false;\n        }\n\n        backingField = value;\n        this.OnPropertyChanged(propertyName);\n        return true;\n    }\n    #endregion\n\n\n    #region GlobalProperties\n    bool _isLoading = false;\n    public bool IsLoading\n    {\n        get =&gt; _isLicenseValid;\n        set =&gt; SetValue(ref _isLoading, value);\n    }\n    #endregion\n}<\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Das sp\u00e4tere ViewModel kann dann die Eigenschaften und Funktionen erben und auf diese zugreifen.<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csharp&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;TrpContentRestriction&quot;:{&quot;restriction_type&quot;:&quot;exclude&quot;,&quot;selected_languages&quot;:[],&quot;panel_open&quot;:true},&quot;language&quot;:&quot;C#&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;csharp&quot;}\">public class AboutViewModel : ViewModelBase\n{\n    #region Properties\n    bool _updateAvailable;\n    public bool UpdateAvailable\n    {\n        get =&gt; _updateAvailable;\n        set\n        {\n            if (value == _updateAvailable)\n                return;\n\n            _updateAvailable = value;\n            OnPropertyChanged();\n        }\n    }\n\n    #endregion\n\n    #region Constructor\n    public AboutViewModel()\n    {\n        LoadSettings();\n    }\n    void LoadSettings()\n    {\n        UpdateAvailable = false;\n    }\n    #endregion\n\n    #region Commands &amp; Actions\n    public ICommand CheckForUpdatesCommand\n    {\n        get { return new RelayCommand(async(p) =&gt; await CheckForUpdatesAction()); }\n    }\n\n    async Task CheckForUpdatesAction()\n    {\n        await CheckForUpdates();\n    }\n\n    #endregion\n\n    #region Methods\n    async Task CheckForUpdates()\n    {\n        \/\/ Perform some tasks...\n    }\n    #endregion\n}<\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Beispiel f\u00fcr eine einfache VIewModel-Basisklasse unter C#.<\/p>","protected":false},"author":1,"featured_media":0,"parent":54210,"menu_order":2,"comment_status":"open","ping_status":"closed","template":"","meta":{"_featured":false,"_is_vendor_doc":"0","footnotes":""},"doc_tag":[],"class_list":["post-57035","docs","type-docs","status-publish","hentry"],"comment_count":0,"_links":{"self":[{"href":"https:\/\/ar3dp.de\/en\/wp-json\/wp\/v2\/docs\/57035","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ar3dp.de\/en\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/ar3dp.de\/en\/wp-json\/wp\/v2\/types\/docs"}],"author":[{"embeddable":true,"href":"https:\/\/ar3dp.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ar3dp.de\/en\/wp-json\/wp\/v2\/comments?post=57035"}],"version-history":[{"count":0,"href":"https:\/\/ar3dp.de\/en\/wp-json\/wp\/v2\/docs\/57035\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/ar3dp.de\/en\/wp-json\/wp\/v2\/docs\/54210"}],"prev":[{"title":"Ini-Datei in C#-Projekt einlesen","link":"https:\/\/ar3dp.de\/en\/docs\/programmieren\/csharp\/ini-datei-in-c-projekt-einlesen\/","href":"https:\/\/ar3dp.de\/en\/wp-json\/wp\/v2\/docs\/54211"}],"wp:attachment":[{"href":"https:\/\/ar3dp.de\/en\/wp-json\/wp\/v2\/media?parent=57035"}],"wp:term":[{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/ar3dp.de\/en\/wp-json\/wp\/v2\/doc_tag?post=57035"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}