2017-10-08 113 views
0

我有一個組合框,顯示列表視圖在下拉列表中,我遵循MVVM模式,我也設置公共屬性在我的Viewmodel,它工作正常,當我分配給標籤,但爲Combobox似乎不依賴於我的綁定。我嘗試了很多方法,但無法找到問題。組合框和列表視圖綁定問題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

你的綁定對Combobox來說有點奇怪。爲什麼要將ListView注入到單個ComboBox項目中?爲什麼要有一個ComboBox? –

回答

2

它看起來像你想顯示在您的ComboBox下拉多列列表,而不是標準的列表,其中每個項目顯示只是一個文本行。

爲了達到這個效果,您在下拉列表中放置了一個ListView

不幸的是,這只是不起作用。

ComboBoxListViewSelector下降,這是允許從列表中選擇項目的抽象。這將屬性SelectedItem限制爲包含在列表中的一個項目。如果您嘗試爲該屬性分配任何不在列表中的值,則該分配不起作用,並且該屬性將保留您在執行分配之前所擁有的值。

現在,該列表可以在XAML內部指定,也可以作爲對屬性ItemsSource的綁定來提供。您正確地爲ListView進行綁定。但是對於ComboBox,您不指定該綁定。相反,您只需指定一個類型爲ComboBoxItem的項目,其中包含整個ListBox作爲其值。因此唯一可以成功分配到ComboBoxSelectedItem屬性的值是單個ComboBoxItem。但是您的綁定永遠不會分配該值,這就是爲什麼關閉時ComboBox從不顯示任何內容。

當它打開它確實顯示包含ListView的單個項目,但這只是一個光學效果。數據興奮不起作用。之所以能用於Label是因爲Label不受限制,並且可以顯示ListView指示它顯示的任何內容。

您可以同步ListViewComboBox只有當兩個控件有兩個ItemsSourceSelectedItem性質相同的綁定。但在這種情況下,您將無法將ListView放置在的下拉列表中。

例如,您可以通過自定義ComboBox的模板(如https://zamjad.wordpress.com/2012/08/15/multi-columns-combo-box中所述)來獲得最接近的內容。與ListView相比,這不會給你的是列標題。此外,這些列將在下拉列表中均勻分佈,但這正是您在ListView中所擁有的內容。

如果你想自動大小它們,你需要添加Width="Auto" SharedSizeGroup="cN"每個ColumnDefinition其中「CN」應具備的列數代替N,使他們Grid中是唯一的,並添加Grid.IsSharedSizeScope="True"<ComboBox >

這對於那些預計會簡單得多的東西來說很麻煩,但不幸的是,您不能在ComboBox的模板中放置ListView,這是基類Selector如何與其項目列表配合使用的限制。

如果您打算考慮第三方控制庫,還有其他選項。我與Syncfusion一起工作,他們有SfMultiColumnDropDown這是你想要的。我很確定其他流行的庫也有類似的控制。

+0

謝謝你的洞察力。 :) –