2016-06-21 6 views
3

Nicht sicher, dass dies möglich ist. Ich versuche, einen Etiketteninhalt an den globalen sortierten Listeneintrag zu binden.WPF Bindung Label Inhalt zu einem sortierten Listeneintrag

public class AppObj 
{ 
    public static SortedList<string, string> Messages { get; set; } 
    ...... 
} 

AppObj.Messages = new SortedList<string, string>(); 
foreach (DictionaryEntry entry in entries) 
{ 
    string key = entry.Key.ToString(); 
    string value = (string)entry.Value; 
    if (AppObj.Messages.ContainsKey(key)) { AppObj.Messages.Add(key, value); } 
    else { AppObj.Messages[key] = value; } 
} 

in XAML

<Label Content="{Binding AppObj.Messages["mykey"]}" /> 

Das doppelte Anführungszeichen innerhalb der [] gibt Fehler.

Wie kann ich das umgehen?

Antwort

1

Wenn mykey in der Beispiel ist ein hardcoded Schlüsselname, dann erstellen Sie einfach eine Eigenschaft, die den Link in den Daten für den Schlüssel "mykey" verfügbar macht. Dann binden Sie einfach an diese Eigenschaft.

public string ViewableMessage { return AppObj.Messages["mykey"]; } 

XAML

<Label Content="{Binding ViewableMessage }" /> 
2

Verwenden Sie IValueConverter. Der SO-Post here zeigt einen Konverter, der ähnlich genug für ein Dictionary funktioniert. Ändern sie eine SortedList erwarten, und es sieht wie folgt aus:

public class SortedListConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     SortedList<string, string> data = (SortedList<string, string>)value; 
     String parame = (String)parameter; 
     return data[parame]; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

Fügen Sie diese auf Ihrem Fenster Ressourcen:

<local:SortedListConverter x:Key="cvtr"/> 

und binden dann etwa so:

<Label Content="{Binding Source={StaticResource AppObj}, 
    Path=Messages, 
    Converter={StaticResource cvtr}, 
    ConverterParameter=key}" />