Domanda

Ho definito uno StringCollection nelle impostazioni del progetto. Voglio usare i valori in una casella combinata.

C'è un modo per accedervi xamly?

ho provato:

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

**** src ** è xmlns del progetto *

Si dice: "Tipo src: MySettings.Default non è stato trovato".

Il fatto è che MySettings è una classe che offre una proprietà predefinita, che è un'istanza thread-safe di MySettings, ho voglia di ottenere la collezione dalla proprietà di default e non istanziando una nuova via.

Non v'è altro modo io non sono a conoscenza di, oggetti statici accesso forse ObjectDataProvider può?

ho pensato, forse posso fare nel App.xaml una risorsa globale che il ritorno MySettings.Default che è un'istanza della classe MySettings, e quindi accedere a tutte le sue proprietà, proverò che fuori, ma io preferisco la facile modo.

È stato utile?

Soluzione

ho sempre fatto utilizzando il x: Statico Markup Extension . La chiave è di impostare la sorgente Settings.Default e il percorso per l'impostazione desiderata in questo modo:

<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>

Altri suggerimenti

Ho trovato questo. Il check-out, la speranza non sto sprecando il mio tempo ...

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

Se avete idee migliori, si prega di fammi sapere.

Come estensione alla risposta di Giuseppe, è anche possibile accedere singole impostazioni direttamente con {x:Static } utilizzando una classe statica wrapper. Questo consente di utilizzare valori delle impostazioni in cui una rilegatura non funziona - in particolare animazioni o proprietà che non sono proprietà di dipendenza

.

L'approccio di base è:

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

che poi riferimento a in XAML sotto il namespace della classe wrapper è lungo le linee di <DoubleAnimation From="{x:Static local:XamlSettings.MySettingsMember}" ... />.

Come un addendum al presente, cercando di esporre direttamente di default non funziona, presumibilmente perché non è abbastanza statica "abbastanza" - immobili in default sono proprietà dell'istanza, che {x:Static} non piace. Probabilmente si può scrivere un'estensione di markup personalizzata che sarebbe ottenere le proprietà di istanza, però.

Questo è particolarmente utile per un approccio basato sulle risorse per l'animazione in cui non strettamente parlando desidera associare (che porta ogni tipo di problema congelabili in gioco), ma non vuoi avere un sacco di <sys:double x:Key="MyNumber">50.0</sys:double>s Singleton calci in giro (o vogliono evitare il sovraccarico di un dizionario risorse a livello di app fusione, che sto portato a credere non è solo un'istanza per una volta l'app).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top