0

(C#で)コンボボックスの許容値のリストに列挙の許容値を入力したいと思いますSystem.IO.Ports.Parity。この目的のために、私はコレクションを作成しました:

public class theParitySource : ObservableCollection<Parity>
{
    public theParitySource()
    {            
        Array parities = System.Enum.GetValues( typeof( Parity ) );
        foreach (Parity p in parities) this.Add(p);            
    }
}

(ところで:この初期化のためのワンライナーはありますか?)そしてこれをコンボボックスのデータコンテキストにしました:

  ...
  xmlns:local="clr-namespace:myNamespace"
  ...

  <ComboBox ...>
      <ComboBox.DataContext>
          <local:theParitySource />
      </ComboBox.DataContext>
  </ComboBox>

ただし、コンボボックスは空のままです(空として表示されますが、正しい長さであるように見えます)。デバッガーでどのようtheParitySourceに入力されるかを確認できます。このアプローチは、ボーレートに対してこれを行う別のコンボボックス(同じクラスでも)で機能します。整数値で初期化するので、ここで列挙型を使用していることに何らかの関係があると思いますが、その理由はわかりません。ポインタはありますか?コンバーターを作成する必要がありますか?

(もちろん、列挙型から文字列のリストを作成することでこれを回避できますが、これはちょっと不快です...)

編集:実際には、これらすべてをXAMLで実行したいと思います。それを行う簡単な方法はありますか?

4

2 に答える 2

6

あなたはこれをすべてXaml使用して行うことができますObjectDataProvider

あなたのWindow.Resources(またはあなたが使用しているあらゆるリソース)で、を設定しますObjectDataProvider

ObjectDataProviderforEnumsを設定するには、 ObjectTypeto{x:Type sys:Enum}MethodNametoGetValuesを設定しComboBoxて、実際のを入力Enumsするか、を使用GetNamesComboBoxて、の文字列表現を入力します。Enum

   xmlns:sys="clr-namespace:System;assembly=mscorlib"
   xmlns:io="clr-namespace:System.IO.Ports;assembly=System"

   <Window.Resources>

        <ObjectDataProvider MethodName="GetValues" ObjectType="{x:Type sys:Enum}" x:Key="ParityValues">
            <ObjectDataProvider.MethodParameters>
                <x:Type TypeName="io:Parity" />
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>

    </Window.Resources>

次に、ComboBoxにバインドします

 <ComboBox ItemsSource="{Binding Source={StaticResource ParityValues}}" />

結果:

ここに画像の説明を入力してください

于 2013-02-20T20:22:46.747 に答える
1

適切なパスにバインドする必要があります。データコンテキストを設定している可能性がありますが、表示するプロパティを指定していません。

バインドされたコンテキストのどの部分を表示したいのか、どの部分を「選択」したいのかを指定する必要があります。

WPFコンボボックスDisplayMemberPath

于 2013-02-20T20:20:34.703 に答える