ホームページ >バックエンド開発 >C++ >Enum 値を WPF ComboBox コントロールにバインドするにはどうすればよいですか?

Enum 値を WPF ComboBox コントロールにバインドするにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-05 21:50:41602ブラウズ

How to Bind Enum Values to a WPF ComboBox Control?

列挙型を WPF ComboBox コントロールにバインドする: シンプルなアプローチ

WPF (Windows Presentation Framework) を使用する場合、データをコンボボックス コントロールにバインドする必要があることがよくあります。コンボボックスコントロール。データが列挙型として表される場合、ComboBox 項目に enum 値を直接表示するのは簡単です。

次のシナリオを考えてみましょう。さまざまなプロパティをカプセル化するクラスがあり、ComboBox をバインドしたいとします。これらのプロパティの 1 つに、列挙型として表されます。 DataContext をクラス インスタンスに設定し、XAML ファイルでバインディング構文を使用するのが一般的な方法です。ただし、この方法では、列挙型値がコンボボックス内の項目として表示されない場合があります。

解決策 1: コードからバインドする

コードからコンボボックスに列挙型値を直接表示するには、次の手順を実行します。

  1. ウィンドウの Loaded イベント ハンドラーに次のコードを挿入します。 code:
yourComboBox.ItemsSource = Enum.GetValues(typeof(EffectStyle)).Cast<EffectStyle>();

この行は、列挙値を取得し、それらを正しい型に変換し、ComboBox の ItemsSource プロパティに割り当てます。

解決策 2: バインディングXAML

または、XAML でバインディングを確立するには、 ObjectDataProvider:

<Window>
    <Window.Resources>
        <ObjectDataProvider x:Key="dataFromEnum" MethodName="GetValues"
                            ObjectType="{x:Type System:Enum}">
            <ObjectDataProvider.MethodParameters>
                <x:Type TypeName="Motion.VideoEffects:EffectStyle"/>
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
    </Window.Resources>
    <Grid>
        <ComboBox ItemsSource="{Binding Source={StaticResource dataFromEnum}}"
                  SelectedItem="{Binding Path=CurrentEffectStyle}" />
    </Grid>
</Window>

この XAML コードは、ウィンドウのリソース内で ObjectDataProvider を定義します。 MethodName プロパティは GetValues に設定され、列挙値を取得します。 ObjectType プロパティは列挙型の型を指定し、MethodParameters プロパティはデータ プロバイダーが値を取得する列挙型の型を指定します。

XAML コードでは、名前空間とアセンブリが使用されることに注意することが重要です。 enum 型の値を指定する必要があります:

xmlns:System="clr-namespace:System;assembly=mscorlib"
xmlns:StyleAlias="clr-namespace:Motion.VideoEffects"

これらのアプローチを使用すると、enum 値を WPF ComboBox コントロールにバインドできるようになり、簡単な操作が可能になります。ドロップダウン リストに列挙型を表示する方法。

以上がEnum 値を WPF ComboBox コントロールにバインドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。