Frage

Ich habe ein String in den Projekteinstellungen definiert. Ich möchte die Werte in einem ComboBox verwenden.

Gibt es eine Möglichkeit, den Zugang es xamly?

Ich habe versucht:

<CollectionViewSource Source="{x:Static src:MySettings.Default.MyCollection}" />
<CollectionViewSource 
    Source="{Binding Source={x:Static src:MySettings.Default.MyCollection}}" />

**** src ** ist die xmlns des Projekts *

Dort heißt es: "Typ src: MySettings.Default wurde nicht gefunden".

Die Sache ist die, dass MySettings eine Klasse ist, dass bietet eine Standard-Eigenschaft, die eine Thread-sichere Instanz MySettings ist, möchte ich wirklich die Sammlung von der Standardeigenschaft erhalten und nicht durch eine neue Instanziierung auf.

Gibt es andere Möglichkeiten, wie ich bin mir nicht bewusst, vielleicht Object können den Zugriff statische Objekte?

Ich dachte, vielleicht kann ich in der App.xaml eine globale Ressource, dass Rückkehr MySettings.Default, die eine Instanz der Klasse MySettings ist, und dann alle seine Eigenschaften zuzugreifen, werde ich diese heraus versuchen, aber ich ziehe die einfache Art und Weise.

War es hilfreich?

Lösung

Ich habe es immer getan mit der x: Statische Markuperweiterung . Der Schlüssel ist, um die Quelle zu Settings.Default und den Pfad zu der gewünschten Einstellung wie folgt:

<Window x:Class="SettingsBindSample.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:s="clr-namespace:SettingsBindSample.Properties"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <CollectionViewSource x:Key="MyItems" 
      Source="{Binding MyCollection, Source={x:Static s:MySettings.Default}}" />
    </Window.Resources>
    <StackPanel>
        <ComboBox ItemsSource="{Binding Source={StaticResource MyItems}}" />
    </StackPanel>
</Window>

Andere Tipps

fand ich dies. Check-out, hoffe ich meine Zeit nicht verschwenden ...

http://code.msdn.microsoft.com/StaticExExtension

Wenn Sie eine bessere Idee haben, bitte lass mich wissen.

Als Erweiterung Josephs Antwort, ist es auch möglich, den Zugriff auf individuelle Einstellungen direkt mit {x:Static } durch eine statische Wrapper-Klasse. Dies ermöglicht die Verwendung von Einstellungen Werten, bei denen eine Bindung wird nicht funktionieren - vor allem Animationen oder Eigenschaften, die nicht Abhängigkeitseigenschaften sind

.

Der grundlegende Ansatz ist:

public static class XamlSettings 
{
     public static MySettingsMember { get {return Properties.MySettings.Default.MySettingsMember; }}
}

, die Sie dann unter dem Namespace in XAML beziehen sich auf die Wrapper-Klasse in entlang der Linien von <DoubleAnimation From="{x:Static local:XamlSettings.MySettingsMember}" ... /> ist.

Als Nachtrag zu diesem Versuch Standard zu belichten direkt nicht funktioniert, vermutlich, weil es nicht ganz statisch „genug“ ist - Eigenschaften auf Standard sind Instanzeigenschaften, die {x:Static} nicht wie. Sie könnten wahrscheinlich eine benutzerdefinierte Markup-Erweiterung schreiben, die Instanzeigenschaften erhalten würde, wenn.

Dies ist besonders nützlich für eine ressourcenbasierten Ansatz für die Animation, wo man streng nicht wollen, zu binden sprechen (die alle möglichen freezable Probleme ins Spiel bringt), aber noch haben Sie viele Singletons <sys:double x:Key="MyNumber">50.0</sys:double>s haben wollen kicken (oder wollen den Aufwand eines fusionierten App-Level-Ressource-Wörterbuch zu vermeiden, die ich geführt habe, ist zu glauben, nicht nur instanziiert einmal über die app).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top