source

ObjectDataProvider를 통해 ComboBox를 일반 사전에 바인딩하는 방법

manycodes 2023. 4. 26. 23:27
반응형

ObjectDataProvider를 통해 ComboBox를 일반 사전에 바인딩하는 방법

코드 뒤에 있는 키/값 데이터로 ComboBox를 채우고 싶은데, 다음이 있습니다.

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>

코드 이면:

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;
        }
    }
}

키가 int이고 값이 string이 되려면 무엇을 변경해야 합니까?

ComboBox에 추가

SelectedValuePath="Key" DisplayMemberPath="Value"

더 쉬운 방법이 있습니다.

열거를 일반으로 변환합니다.사전 개체입니다.예를 들어, 평일이 포함된 콤보 상자를 원한다고 가정합니다(VB를 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

XAML에서는 개체에 바인딩하도록 다음만 설정하면 됩니다.

SelectedValue="{Binding Path= StartDayNumberOfWeeek}"  SelectedValuePath="Key" 
DisplayMemberPath="Value" />

위의 코드는 모든 열거를 처리하기 위해 반사를 사용하여 쉽게 일반화할 수 있습니다.

이것이 도움이 되길 바랍니다.

DevExpress 17.1.7에서는 이러한 속성을 설정합니다.DisplayMember그리고.ValueMember사전의 경우 다음과 같습니다.

DisplayMember="Value" 
ValueMember="Key"

언급URL : https://stackoverflow.com/questions/1605845/how-to-bind-a-combobox-to-generic-dictionary-via-objectdataprovider

반응형