2017-01-24 15 views
0

ユーザーがコンボボックスから複数の項目を選択できるようにするには、次のコードがあります。しかし、1つのアイテムをクリックすると、コンボボックスが閉じると表示されるテキストになります。表示されたテキストを、選択したアイテムだけではないものに変更することはできますか?たとえば、ユーザーが選択項目A、BとD、Iは、コンボボックスのテキスト部分には、 "A、B、D" を表示したい場合はXAML Comboboxマルチセレクションで表示されるテキストを変更する

<ComboBox ItemsSource="{Binding ListOfItems}"> 
      <ComboBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay}" Width="20" /> 
         <TextBlock Text="{Binding DisplayName}" Width="110" /> 
        </StackPanel> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 
     </ComboBox> 

おかげ

答えて

1

あなたがスタイルとContentControlにを使用することができます選択した項目のContentTemplateプロパティが変更されます。次のサンプルマークアップはあなたにそのアイデアを与えるはずです。

<ComboBox ItemsSource="{Binding ListOfItems}"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <ContentControl Content="{Binding}"> 
       <ContentControl.Style> 
        <Style TargetType="ContentControl"> 
         <Setter Property="ContentTemplate"> 
          <Setter.Value> 
           <!-- the template for the items in the dropdown list --> 
           <DataTemplate> 
            <StackPanel Orientation="Horizontal"> 
             <CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay}" Width="20" /> 
             <TextBlock Text="{Binding DisplayName}" Width="110" /> 
            </StackPanel> 
           </DataTemplate> 
          </Setter.Value> 
         </Setter> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=ComboBoxItem}}" Value="{x:Null}"> 
           <Setter Property="ContentTemplate"> 
            <Setter.Value> 
             <!-- the template for the selected item--> 
             <DataTemplate> 
              <ItemsControl ItemsSource="{Binding ItemsSource, RelativeSource={RelativeSource AncestorType=ComboBox}}"> 
               <ItemsControl.ItemsPanel> 
                <ItemsPanelTemplate> 
                 <WrapPanel /> 
                </ItemsPanelTemplate> 
               </ItemsControl.ItemsPanel> 
               <ItemsControl.ItemTemplate> 
                <DataTemplate> 
                 <TextBlock Text="{Binding DisplayName}" Margin="0 0 5 0"/> 
                </DataTemplate> 
               </ItemsControl.ItemTemplate> 
              </ItemsControl> 
             </DataTemplate> 
            </Setter.Value> 
           </Setter> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </ContentControl.Style> 
      </ContentControl> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

詳細については、次の類似の質問を参照してください。

Can I use a different Template for the selected item in a WPF ComboBox than for the items in the dropdown part?

+0

ありがとうございます。しかし、私が知りたいのは、選択されたアイテムではないプロパティにバインドする方法です。私は2つのプロパティを持っています - ドロップダウンに表示されている項目の一覧ですが、選択した項目をすべて組み合わせた文字列プロパティです。選択した項目の代わりにこれを表示します。 – Danhol86

+1

データコンテキストから値にバインドするためにRelativeSourceを使用しました。 - Danhol86

関連する問題