2017-08-02 5 views
1

ich offensichtlich nicht begreifen SelectedValue zu ändern verwenden, welches Element ein Kombinationsfeld in UWP zeigtUWP ComboBox SelectedValue nicht gesetzt ist

Die XAML einfach

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <ComboBox x:Name="comboBoxColor" /> 
</Grid> 

Der Code-behind ist nicht Diese sehr tief

public MainPage() 
    { 
     this.InitializeComponent(); 
    } 

    public void page_Loaded(object sender, RoutedEventArgs e) 
    { 
     populateDdlMultiColor(); 

     comboBoxColor.SelectedValue = Colors.Red; 
     //comboBoxColor.SelectedIndex = 0 works tho 
    } 

    private void populateDdlMultiColor() 
    { 
     comboBoxColor.ItemsSource = ColorDict(); 
     comboBoxColor.DisplayMemberPath = "Key"; 
     comboBoxColor.SelectedValuePath = "Value"; 


    } 

    private Dictionary<string,Color> ColorDict() 
    { 
     Dictionary<string, Color> L = new Dictionary<string, Color>(); 
     L.Add("reddish",Colors.Red); 

     return L; 
    } 

ist offensichtlich bastel-Spielzeug, aber es nicht die gleiche Art und Weise mein Code nicht: Nach dem SelectedValue Einstellung, die Combo-Box ist auf Index -1 und SelectedValue ist null. Wenn ich SelectedIndex auf einen korrekten Wert setze [siehe Kommentar], funktioniert das Kombinationsfeld - es wurde geladen.

Antwort

1

Vielen Dank für Ihr Feedback. Dies ist ein bekanntes Problem, das SelectedValue nicht mit Aufzählungstyp funktioniert.

Als Workaround können Sie jetzt SelectedIndex oder SelectedItem verwenden, wie Sie es getan haben. Beachten Sie jedoch, dass Dictionary als Hash-Tabelle implementiert ist. Es gibt kein solches Konzept eines "Index" innerhalb einer Dictionary. Die Reihenfolge ist undefiniert und wir können uns nicht darauf verlassen. Für Ihr Szenario ist die Verwendung von SelectedItem möglicherweise besser.

Für weitere Informationen sehen Sie this answer.

0

Danke an Jay Zuo, dass er mich auf den richtigen Weg gebracht hat! In meinem Szenario ist es dann einfach genug, die Farben in Integer als Workaround zu dem bekannten Problem zu konvertieren. Funktioniert nicht bei jeder Aufzählung, aber jeder, der in UWP Farbdropdowns erstellt, kann dies nützlich finden. Beachten Sie die Änderung des Wörterbuchs.

public MainPage() 
    { 
     this.InitializeComponent(); 
    } 

    public void page_Loaded(object sender, RoutedEventArgs e) 
    { 
     populateDdlMultiColor(); 

     comboBoxColor.SelectedValue = ColorInt(Colors.Red); 
    } 

    private void populateDdlMultiColor() 
    { 
     comboBoxColor.ItemsSource = ColorDict(); 
     comboBoxColor.DisplayMemberPath = "Key"; 
     comboBoxColor.SelectedValuePath = "Value"; 


    } 

    private Dictionary<string,int> ColorDict() 
    { 
     Dictionary<string, int> L = new Dictionary<string, int>(); 
     L.Add("reddish",ColorInt(Colors.Red)); 

     return L; 
    } 

    private int ColorInt(Color c) 
    { 

     return (c.A*16777216) + (c.R*65536) + (c.G*256) + c.B ; 
    } 
Verwandte Themen