2009-06-15 4 views
0

J'ai un cache qui récupère des collections basées sur une chaîne (nom de la collection) passée dans le cache (ie ... GlobalCache.Instance [ "Etats"])Définition de ItemsSource d'une liste déroulante à partir d'un INDEXER dans XAML?

J'ai ajouté une ressource comme suit: < EnumCache: GlobalCache x: Key = "GlobalCache" />

alors le contrôle ....

<dataControls:DataFormComboBoxField x:Name="cmbStates" 
    ItemsSource="GlobalCache.Instance['States']" 
    DisplayMemberPath="EnumerationValueDisplayed" 
    Binding="{Binding fldState, Mode=TwoWay,Converter={StaticResource numConverterUsingEnumerationId},ConverterParameter='States'}" /> 

Toutes les idées sur la façon dont je peux prendre pour obtenir que cela fonctionne par XAML sans avoir à régler la ItemsSource via codebehind ?

Il fonctionne très bien par le code derrière mais je veux simplifier le codage plus ...

Répondre

1

Une solution à ce que j'ai trouvé est d'utiliser un autre convertisseur et passer le paramètre à l'indexeur comme ConveterParameter comme suit:

.... Reliure = "{Binding Converter = {} StaticResource CacheIndexConverter, ConverterParameter =} Etats

...

public class CacheIndexConverter : IValueConverter 
{ 
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    string index = parameter as string; 
    return GlobalCache.Instance[index]; 
} 
} 

REMARQUE: L'autre problème que j'ai constaté est que ItemsSource n'est pas exposé via XAML, donc il n'y a pas encore d'accès sans écriture d'extensions ou de sous-classes.

0

Cela devrait fonctionner:

ItemsSource="{Binding Source={StaticResource GlobalCache}, Path=Instance[States]}" 
Questions connexes