2017-10-08 22 views
0

私はドロップダウンリストビューを表示するコンボボックスを持っていますが、私はMVVMパターンを守っています。また、私のViewmodelのパブリックプロパティを設定しています。コンボボックスは私の縛りに頼らないようです。私は数多くの方法を試したが問題を見つけることができなかった。コンボボックスとリストビューのバインディングの問題wpf c#

XAML:これは私がパブリックプロパティを使用して、その要素にアクセスしていたときに私のために正常に動作します

<ComboBox Name="SearchBox" IsEditable="True" Background="White" md:HintAssist.Hint="Search MUID" Grid.Column="1" Margin="5 0 0 0" 
        Grid.Row="0" Height="40" Width="400" HorizontalContentAlignment="Left" HorizontalAlignment="Left" SelectedItem="{Binding ElementName=lstview ,Path=SelectedItem}" > 
           <ComboBoxItem> 
           <ListView x:Name="lstview" ItemsSource="{Binding filterSW}" 
        SelectedItem="{Binding SelectedMU}" 
        Height="200" ScrollViewer.VerticalScrollBarVisibility="Visible"> 
            <ListView.View> 
             <GridView> 
              <GridViewColumn Width="130" Header="Mu-ID" /> 
              <GridViewColumn Width="130" Header="MU-Identifier" DisplayMemberBinding="{Binding MU_Identifier}" /> 
              <GridViewColumn Width="130" Header="Status" DisplayMemberBinding="{Binding RequestType}" /> 
              <GridViewColumn Width="130" Header="UniqueID" /> 
             </GridView> 
            </ListView.View> 
           </ListView> 
           </ComboBoxItem> 
          </ComboBox> 

、私はまた、テキスト= {SelectedMU.MU_Identifierバインド}とSelectedValueのを設定しようとしましたが、そのわずかに動作していません。

<Label Grid.Column="3" HorizontalAlignment="Center" Background="GreenYellow" Content="{Binding SelectedMU.MU_Identifier}"></Label> 
+0

あなたのバインディングは、コンボボックスにとってちょっと変わったものです。 ListViewを1つのComboBoxアイテムに挿入しているのはなぜですか?なぜComboBoxを持っているのですか? –

答えて

2

あなたが代わりに各項目が単なるテキスト行を示し、標準リストのあなたのComboBoxドロップダウンで複数列のリストを表示しようとしているようです。

この効果を達成するには、ListViewをドロップダウン内に配置します。

残念ながら、これはうまくいきません。

ComboBoxおよびListView降順Selectorは、リストから項目を選択できる抽象化です。これにより、リストに含まれているの項目のいずれかにプロパティSelectedItemが制限されます。このプロパティーにリストにない値を割り当てようとすると、割り当ては機能しません。また、プロパティーは割り当てを行う前の値を保持します。

ここでは、リストはXAML内で指定することも、プロパティItemsSourceへのバインディングとして指定することもできます。あなたはListViewのためのバインディングを正しく行います。しかし、ComboBoxの場合は、そのバインディングを指定しません。代わりに、タイプの項目を1つ指定します。項目は、ListBoxを値として含みます。したがって、ComboBoxSelectedItemプロパティに正常に割り当てられる唯一の値は、単一のComboBoxItemです。しかし、あなたのバインディングは決してその値を割り当てないので、閉じたときに何も表示されないのはComboBoxです。

開いているときは、ListViewを含む単一の項目が表示されますが、これは単なる光学効果です。データ・ビンジングは機能しません。 Labelで動作する理由は、Labelに制約がなく、ListViewが表示するように指示することができるためです。

あなたは、両方のコントロールが両方ItemsSourceSelectedItemプロパティの同じバインディングを持っているときにのみListViewComboBoxを同期させることができます。しかしこの場合、ListViewの中にドロップダウンすることはできません。

最も近いのは、ComboBoxのテンプレートをhttps://zamjad.wordpress.com/2012/08/15/multi-columns-combo-boxに記載されているようにカスタマイズすることです。これは、ListViewと比較して、列ヘッダーではありません。また、列はドロップダウン内で均等に配置されますが、これはとにかくListViewにあります。

あなたは、自動サイズ彼らにしたい場合は、「CN」はGrid内でそれらを一意にすると<ComboBox >

Grid.IsSharedSizeScope="True"を追加する代わりに、Nの列番号を持っている必要があり、各ColumnDefinitionWidth="Auto" SharedSizeGroup="cN"を追加する必要があると思います

これは、はるかに簡単であると予想される問題が多いですが、残念ながらのテンプレートの中にListViewを置くことはできません。これは、基本クラスSelectorの項目リストの使用方法の制限です。

サードパーティのコントロールライブラリを検討するために開いている場合は、他のオプションがあります。私はSyncfusionで働いていましたが、彼らはSfMultiColumnDropDownを持っています。私は他の一般的なライブラリにも同様のコントロールがあることは確かです。

+0

あなたの洞察をいただきありがとうございます。 :) –

関連する問題