2016-06-26 5 views
1

私はこれに関する多くのリソースと結果、またはすべてがアプローチと複雑さに変化が見られました。たとえば:コンボをローカライズされた列挙型プロパティにバインドする

Binding SelectedValue of ComboBox to enum in WPF

Is it possible to databind to a Enum, and show user-friendly values?

私は、列挙型の3セットがあります。

public enum StudentGender 
{ 
    [XmlEnum(Name ="M")] 
    Male, 
    [XmlEnum(Name = "F")] 
    Female 
} 

public enum StudentAppointed 
{ 
    [XmlEnum(Name = "E")] 
    Elder, 
    [XmlEnum(Name = "MS")] 
    MinisterialServant, 
    [XmlEnum(Name = "X")] 
    NotAppointed 
} 

public enum StudentServing 
{ 
    [XmlEnum(Name = "R")] 
    RegularPioneer, 
    [XmlEnum(Name = "P")] 
    Publisher, 
    [XmlEnum(Name = "U")] 
    UnbaptisedPublisher, 
    [XmlEnum(Name = "S")] 
    Studying 
} 

を、私はそれにいくつかのコンボボックスを持つポップアップウィンドウを実装しています。

ここPopup Window

3コンボボックスのいずれかの結合の例である:それは使用して結合され、上記の場合

<StackPanel Grid.Row="2" Grid.Column="0" Margin="2" Background="WhiteSmoke"> 
    <Label>Serving As:</Label> 
    <ComboBox x:Name="comboServingAs" SelectedItem="{Binding Serving}" SelectedIndex="2"> 
     <ComboBoxItem>Studying</ComboBoxItem> 
     <ComboBoxItem>Unbaptized Publisher</ComboBoxItem> 
     <ComboBoxItem>Publisher</ComboBoxItem> 
     <ComboBoxItem>Regular Pioneer</ComboBoxItem> 
    </ComboBox> 
</StackPanel> 

サービングすると、次のプロパティである。

[XmlAttribute(AttributeName ="Publisher")] 
public StudentServing Serving { get; set; } 

前述したように、私は複雑さが異なる以前のアイデアを見てきました。しかし、可能であれば私は同じことを3回実装する必要がないようにしようとしています。それらのすべてに適用できるソリューションを1つ用意できますか?

いずれの場合も、選択したコンボボックスの項目を関連付けられたプロパティenumでマップする必要があります。すべて正しく動作するようにします。私はそれが今間違っていることを実感します。

私は兄弟/姉妹を理由で使用しているので、これはGenderコンボの方が複雑になります。

私は約[DescriptionAttribute]を見ましたが、上記の回答も参考になりました。私の列挙型は本質的に整数であるということが、私にはちょうど起こります。だから、なぜ私は何らかの形で、選択されたインデックス値に基づいて適切な列挙型に/からキャストできないのですか?

私の質問があまりにも混乱しないことを願っています。

+0

"なぜ、選択したインデックス値に基づいて正しい列挙型に/からキャストできないのですか?"私はそれがあなたにしようとしていないと答えていると思います。これらのValueConvertersを使用して、SelectedItemの代わりにComboBoxの 'SelectedIndex'にバインドする3つのValueConvertersを記述することを防ぎますか? –

+0

@MarkusHütter私はそれがインデックスを介して処理することをお勧めしませんでした。私は私の答えごとに別の方法を見つけました。ありがとう。 –

答えて

1

私は助けてくれた素晴らしい記事hereを見つけました!

上記のチュートリアルで説明したイベントハンドラを追加して、すべてを処理できました。

ソート済みです。

+0

チュートリアルはうまくいきますが、イベントハンドラは使用しません。 –

+0

@MarkusHütterイベントハンドラを使ってどのように簡単にすることができますか?興味がある。関連リンクはありますか?ありがとう。 –

+0

はありません。 _you_はあなたがそれらを使ったと言って以来、私は同じことを思っていた... –

関連する問題