1

私は WPF を使用しており、ビューにコンボボックスがあります。私の要件は、名前のリスト (0 から n 要素の範囲) とローカライズ可能な文字列 "Dummy Name" をコンボボックスに表示することです。そこで、コンボボックスの ItemsSource を 2 つの異なるソース (「names」と呼ばれる文字列のリスト + ローカライズされた文字列「Dummy Name」) から取得します。これはすべてうまくいきます。すべての要素が適切に表示されます。WPFでの私の定義は次のとおりです。

<CollectionViewSource Key="NamesSource" Source="{Binding Context.Data.Names}" />

<ComboBox HorizontalAlignment="Stretch" VerticalAlignment="Top" SelectedItem="{Binding Person.LastName}">
  <ComboBox.ItemsSource>
    <CompositeCollection>
      <ComboBoxItem Content="{Static res:Labels.DummyName_Combobox_Selection}"/>
      <CollectionContainer Collection="{Binding Source={StaticResource NamesSource}}" />
    </CompositeCollection>
  </ComboBox.ItemsSource>
</ComboBox>

CollectionViewSource はリソース ディクショナリの一部ですが、省略しました。問題は ComboBoxItem 要素にあります。

コンボボックスで選択すると、「Dummy Name」ではなく「Combobox: Dummy Name」という文字列が Person.LastName に割り当てられます。

コンボボックスの SelectedMemberPath 属性を「Content」に設定しても機能しません (Names の文字列に Content プロパティがないためだと思います)。

「コンボボックス:ダミー名」ではなく、コンボボックスで「ダミー名」が選択されているときに、「ダミー名」をPerson.LastNameに割り当てるにはどうすればよいですか?

4

2 に答える 2

1

ComboboxItem の代わりに StaticExtension を CompositeCollection に追加しました。というわけで今はこんな感じ。

<CollectionViewSource Key="NamesSource" Source="{x:Binding Context.Data.Names}" />

<ComboBox HorizontalAlignment="Stretch" VerticalAlignment="Top" SelectedItem="{x:Binding Person.LastName}">
  <ComboBox.ItemsSource>
    <CompositeCollection>
      <x:Static Member="res:Labels.DummyName_Combobox_Selection"/>
      <CollectionContainer Collection="{x:Binding Source={StaticResource NamesSource}}" />
    </CompositeCollection>
  </ComboBox.ItemsSource>
</ComboBox>

これは望ましい効果があるようです。

于 2015-12-17T13:50:22.507 に答える
0

問題は、コレクションに を追加しているComboBoxItemため、コレクションに一連の文字列とComboBoxItem. Person.LastNameバインディングは文字列を必要とするため、WPF は を呼び出してToString()ComboBoxItemたまたま "ComboBoxItem: " + そのコンテンツを出力します。

stringではなく、別のものを追加する必要がありComboBoxItemます。通常、リテラルの xaml 要素ではなく、プロパティへのバインドにリソースを使用するため、これは少し注意が必要です。ただし、を使用してそれを行うことができますObjectDataProvider

<CompositeCollection>
  <ObjectDataProvider ObjectInstance="{Static res:Labels.DummyName_Combobox_Selection}" />
  <CollectionContainer Collection="{Binding Source={StaticResource NamesSource}}" />
</CompositeCollection>
于 2015-12-17T10:24:34.330 に答える