Je veux remplir un ComboBox avec des données de clé/valeur dans le code derrière, j'ai ceci:
XAML:
<Window x:Class="TestCombo234.Window1"
xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestCombo234"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<ObjectDataProvider x:Key="Choices" ObjectType="{x:Type local:CollectionData}" MethodName="GetChoices"/>
</Window.Resources>
<StackPanel HorizontalAlignment="Left">
<ComboBox ItemsSource="{Binding Source={StaticResource Choices}}"/>
</StackPanel>
</Window>
Code derrière:
using System.Windows;
using System.Collections.Generic;
namespace TestCombo234
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
}
public static class CollectionData
{
public static Dictionary<int, string> GetChoices()
{
Dictionary<int, string> choices = new Dictionary<int, string>();
choices.Add(1, "monthly");
choices.Add(2, "quarterly");
choices.Add(3, "biannually");
choices.Add(4, "yearly");
return choices;
}
}
}
Mais cela me donne ceci:
texte alternatif http://img193.imageshack.us/img193/9218/choices.png
Que dois-je changer pour que la clé soit l'int et la valeur la chaîne?
À votre ComboBox ajoutez
SelectedValuePath="Key" DisplayMemberPath="Value"
Il existe un moyen plus simple.
Convertissez l'énumération en un objet Generic.Dictionary. Par exemple, disons que vous vouliez une zone de liste déroulante avec le jour de la semaine (convertissez simplement le VB en C #)
Dim colWeekdays As New Generic.Dictionary(Of FirstDayOfWeek, String)
For intWeekday As FirstDayOfWeek = vbSunday To vbSaturday
colWeekdays.Add(intWeekday, WeekdayName(intWeekday))
Next
RadComboBox_Weekdays.ItemsSource = colWeekdays
Dans votre XAML, il vous suffit de définir ce qui suit pour se lier à un objet:
SelectedValue="{Binding Path= StartDayNumberOfWeeek}" SelectedValuePath="Key"
DisplayMemberPath="Value" />
Le code ci-dessus peut facilement être généralisé en utilisant la réflexion pour gérer toutes les énumérations.
j'espère que cela t'aides
La façon dont DevExpress 17.1.7 gère cela définit ces propriétés: DisplayMember
et ValueMember
, dans le cas d'un dictionnaire, ce serait quelque chose comme ceci:
DisplayMember="Value"
ValueMember="Key"