2017-07-03 3 views
0

Ich verwende ein Xamarin.Forms Picker und es wird von einem List<KeyValuePair<string, string>> aufgefüllt. Das Problem ist, dass es nicht so angezeigt wird, wie ich es möchte.Anzeigeformat der Liste ändern <KeyValuePair <Zeichenfolge, Zeichenfolge >>

XAML:

<Picker x:Name="VersionPicker" ItemsSource="{Binding}"/> 

C#:

Dictionary<string, string> VersionDictionary = new Dictionary<string, string>() 
{ 
    { "asv1901", "American Standard Version" }, 
    { "bbe", "Bible In Basic English" }, 
}; 
List<KeyValuePair<string, string>> VersionList = VersionDictionary.ToList(); 

VersionPicker.BindingContext = VersionList; 

Was es produziert wie das ist ...

[asv1901, American Standard Version] 

ich Picker möchte etwas in dieser Richtung haben ..

American Standard Version (asv1901) 

Gibt es eine Möglichkeit, dies zu tun? XAML oder C# wäre in Ordnung (da es sich um eine rein visuelle Änderung handelt, dachte ich, dass XAML oder ein Konverter am sinnvollsten wäre).

+0

ItemDisplayBinding wird verwendet, um den angezeigten Text von Ihrer Quelle zu binden. Anstatt KeyValuePair zu verwenden, können Sie Ihre eigene Klasse erstellen (oder KVP erweitern), die eine Display-Eigenschaft enthält, die wie gewünscht formatiert wurde. – Jason

+1

Versuchen Sie Folgendes: var VersionList = VersionDictionary.AsEnumerable(). Wählen Sie (x => string.Format ("{0} ({1})", x.Value, x.Key) .ToList(); – jdweng

+0

@jdweng FYI ... Sie benötigen ein zusätzliches ')' zwischen 'x.Key)' und '.ToList()'. – doubleJ

Antwort

0

Ein Dankeschön an jdweng (da er/sie hat einfach einen Kommentar und keine Antwort) ...

Dictionary<string, string> VersionDictionary = new Dictionary<string, string>() 
{ 
    { "asv1901", "American Standard Version" }, 
    { "bbe", "Bible In Basic English" }, 
}; 
// take the dictionary<string, string>, turn it into an ienumerable<keyvaluepair<string, string>>, use linq to output the contents, format a new string based on those contents, turn it into list<string> 
// "Bible In Basic English (bbe)" 
var VersionList = VersionDictionary.AsEnumerable().Select(x => string.Format("{0} ({1})", x.Value, x.Key)).ToList(); 

VersionPicker.BindingContext = VersionList; 

diese Wahl in das entsprechende Format Um wieder ...

private void VersionPicker_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    var selecteditem = VersionPicker.SelectedItem.ToString(); 
    // single quotes make it type Char while double quotes make it type String 
    Char delimiter = '('; 
    // create an array from the string separated by the delimiter 
    String[] selecteditemparts = selecteditem.Split(delimiter); 
    // take off the end space 
    var selecteditemvalue = selecteditemparts[0].Substring(0, (selecteditemparts[0].Length - 1)); 
    // take off the end) 
    var selecteditemkey = selecteditemparts[1].Substring(0, (selecteditemparts[1].Length - 1)); 
} 

Als sekundäre Option (und die, die ich am Ende mit) ...

Dictionary<string, string> VersionDictionary = new Dictionary<string, string>() 
{ 
    { "asv1901", "American Standard Version" }, 
    { "bbe", "Bible In Basic English" }, 
}; 

var VersionList = new List<string>(); 

// keyvaluepair is a single instance and dictionary is a collection of keyvaluepairs 
foreach (KeyValuePair<string, string> version in VersionDictionary) 
{ 
    var key = version.Key.ToUpper(); 
    var value = version.Value; 
    // "Bible In Basic English (BBE)" 
    VersionList.Add(string.Format("{0} ({1})", value, key)); 
} 

Es macht einfach mehr Sinn, meinen lieben Anfänger kodierendes Gehirn. Ich bin sicher, dass jdwengs linq-Beispiel viel prägnanter ist.

Verwandte Themen