2012-01-05 113 views
0

我試圖用WPF中的Datagrid下拉菜單來組裝一個ComboBox。我需要以編程方式完成代碼並將其包含在代碼隱藏中。如何在WPF中使用DataGrid下拉菜單創建組合框?

這裏是我到目前爲止有:

     Dim cb As New ComboBox 
         Dim dg As New DataGrid 

         dg.AutoGenerateColumns = False 

         dg.ItemsSource = clnObjects 

         Dim col_name As New DataGridTextColumn 
         col_name.Header = "Name" 
         col_name.Binding = New Binding("Name") 
         col_name.CanUserSort = False 
         col_name.CanUserResize = False 

         dg.Columns.Add(col_name) 

         Dim col_startdate As New DataGridTextColumn 
         col_startdate.Header = "Start Date" 
         col_startdate.Binding = New Binding("StartDate") 
         col_startdate.CanUserSort = False 
         col_startdate.CanUserResize = False 

         dg.Columns.Add(col_startdate) 

         cb.Items.Add(dg) 

此代碼生成一個包含兩個列的DataGrid和似乎看起來罰款組合框。雖然當您單擊ComboBox並選擇DataGrid中的某一行時,ComboBox中的選擇無法正常工作。 (它只是顯示colum頭文件。) 我希望選定行的第一列中的值顯示爲ComboBox選擇。

如果任何人都可以幫助我解決這個問題,它會非常令人滿意。

感謝,

邁克

+1

爲什麼你不能使用XAML來做到這一點? – Bernard 2012-01-05 15:14:40

+0

我在運行時創建ComboBox。 – zzMzz 2012-01-05 15:32:05

回答

1

這聽起來像你想你的ComboBox包含項目從clnObjects,但使用DataGrid,而不是默認StackPanel以顯示下拉。

現在你的ComboBox是滿DataGrid控件,而不是任何對象在clnObjects。這意味着,當你選擇一個項目,你選擇一個DataGrid,而不是DataGrid.SelectedItem

你可以嘗試這樣的組合框的顯示文字包含ComboBox.SelectedItem.SelectedItem,其中第一SelectedItem是DataGrid的,但是我還是覺得這個改變是一個壞的設計,因爲你需要創建每ComboBoxItem

DataGrid對象相反,我會建議overwritting默認ComboBox.Template,而不是在默認StackPanel中顯示在DataGrid組合框項目。默認的組合框模板可以在here找到。只需複製它,並用IsItemsHost="True"替換StackPanel到DataGrid

<Popup x:Name="Popup" ...> 
    <Grid x:Name="DropDown" ...> 
     <Border x:Name="DropDownBorder" ... /> 
     <ScrollViewer ...> 
     <!-- Replace this with a DataGrid --> 
     <StackPanel IsItemsHost="True" 
        KeyboardNavigation.DirectionalNavigation="Contained" /> 
     </ScrollViewer> 
    </Grid> 
    </Popup>