2010-11-22 3 views
0

Idealerweise möchte ich einige Eigenschaften in der App-Klasse für meine WPF-Anwendung zwischen Fenstern, Dialogen, Steuerelementen usw. zu teilen. Es ist trivial, diese Eigenschaften von anderen WPF-Komponenten verweisen Oder sollte ich sie einfach statisch machen, um den Zugriff zu erleichtern?Referenz App-Klasse Eigenschaften von Window-Klassen in WPF

Antwort

1

Meiner Meinung nach besteht das größte Problem beim Platzieren von Eigenschaften in der App-Klasse darin, dass der Code eng gekoppelt ist. Außerdem können die Eigenschaften außerhalb des Anwendungsbereichs der App-Klasse liegen.

Wenn Sie sich für Muster nicht interessieren, d. H. Ihre Anwendung neigt nicht dazu, in der Komplexität zu wachsen, kann die Verwendung von Eigenschaften in der App-Klasse eine schnelle und einfache Lösung sein. Aber wenn Sie dies in einem bereits komplexen (oder wachsenden) Code tun, kann dies zu einer Menge Kopfschmerzen führen.

Wenn Sie die Eigenschaften statisch machen, also in eine Klasse einfügen und sie in einer anderen Klasse referenzieren, erhalten Sie einen weniger eng gekoppelten Code, aber nicht zu wenig.

+0

Ich nehme an, dass die App-Klasse nicht dazu gedacht war, in der Art und Weise verwendet zu werden, wie ich sie vorschlage. Ich dachte, es wäre gut, ein paar Eigenschaften in dieser Klasse zu platzieren, damit andere Fenster auf Informationen zugreifen können, aber ich denke, dass Sie Recht haben könnten. Es ist keine große Anwendung, aber ich möchte so konsistent wie möglich sein, indem ich gute Praktiken benutze. – jlafay

+0

Nun, Sie könnten ein kleines Framework für den Zugriff auf Eigenschaften erstellen, mit Funktionen, die Persistenz bieten (wenn es nötig ist). Die einfachste Lösung besteht darin, eine Klasse zu erstellen, die solche Eigenschaften enthält. Auf diese Weise behalten Sie zumindest die Codekohäsion bei. – EdMelo

1

Wenn Sie Eigenschaften auf Ihrer App-Klasse aussetzen, Sie zu diesen Eigenschaften deklarativ durch die Datacontext Einstellung binden können:

DataContext="{x:Static Application.Current}" 

ich mit Eduardo jedoch stimmen, werden Sie eng am Ende gekoppelt ist Ihre App Implementierung. Sie können dies möglicherweise mindern, indem Sie eine statische Klasse definieren, auf die Sie verweisen können, aber für Ihre Ansichten View-Modelle erstellen, die intern Ihre statische Klasse verwenden, um die Werte abzurufen, an die sie gebunden sind.

Wenn die meisten Ihrer Eigenschaften Strings sind, können Sie sie in den Ressourcen der Anwendung definieren könnte (dies zu tun, müssen Sie Ressourcen von Internal zu öffentlichen ändern) und greifen Sie statisch wie so: So

<Window 
    x:Class="MyApp.Shell" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" 

    xmlns:properties="clr-namespace:MyApp.Properties" 

    Title="{x:Static properties:Resources.Shell_Title}" WindowStartupLocation="CenterScreen" WindowState="Normal" 
></Window> 
Verwandte Themen