2011-07-14 8 views
0

私はDatagridComboboxColumnについて同様の質問がありましたが、.itemsourceを使用してDataGrid外の配列にバインドする方法を示しました。私は、データグリッドが実行時にバインドされているコレクションにバインドしようとして問題が発生しています。WPF VB.NET 4.0ランタイム時のDatagridComboBoxColumnバインディング

私はこれにどのように近づいているかを確認するためのテストプログラムを用意しました。

Class MainWindow 

Dim ServerInfoArray As List(Of ServerInfo) = New List(Of ServerInfo) 

Private Sub GetInfo(ByVal list As List(Of String)) 
    For Each server As String In list 

     Dim tempip As ComboBoxItem = New ComboBoxItem 
     Dim tempip2 As ComboBoxItem = New ComboBoxItem 
     Dim sinfo As ServerInfo = New ServerInfo 

     tempip.Content = "192.129.123.23" 
     tempip2.Content = "23.213.223.21" 

     sinfo.IPArray.Items.Add(tempip) 
     sinfo.IPArray.Items.Add(tempip2) 
     sinfo.ServerName = server 

     ServerInfoArray.Add(sinfo) 
     DataGrid1.Items.Refresh() 
    Next 
End Sub 

Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click 

    Dim serverlist As List(Of String) = New List(Of String) 
    serverlist.Add("Test") 
    serverlist.Add("Random") 
    serverlist.Add("Local") 
    GetInfo(serverlist) 
End Sub 

Private Sub Window_Loaded(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded 
    Dim Col_Serial As DataGridTextColumn = New DataGridTextColumn() 
    Col_Serial.Binding = New Binding("Servername") 
    Col_Serial.Header = "Servername" 
    Col_Serial.Width = 40 

    Dim Col_IPArray = New DataGridComboBoxColumn() 
    Col_IPArray.Header = "IP Addresses" 
    Col_IPArray.IsReadOnly = True 
    'Col_IPArray.ItemsSource = serverInfoArray ' Don't know how to do this. 
    Col_IPArray.SelectedValuePath = "IPArray" 
    Col_IPArray.DisplayMemberPath = "IPArray" 

    DataGrid1.Columns.Add(Col_Serial) 
    DataGrid1.Columns.Add(Col_IPArray) 
    DataGrid1.ItemsSource = ServerInfoArray 
End Sub 
End Class 

Class ServerInfo 

Dim _Servername As String 
Dim _IPArray As ComboBox 
Public Property Servername() As String 
    Get 
     Return _Servername 
    End Get 
    Set(ByVal value As String) 
     _Servername = value 
    End Set 
End Property 

Public Property IPArray As ComboBox 
    Get 
     Return _IPArray 
    End Get 
    Set(ByVal value As ComboBox) 
     _IPArray = value 
    End Set 
End Property 

Public Sub New() 
    _Servername = Nothing 
    _IPArray = New ComboBox 
End Sub 
End Class 

すべての文字列とブール値をバインドすることができます。

このDataGridComboBoxColumnをプロパティに関連付けられたリストにバインドする方法がわかりません。実行時にこれを行う必要があるため、XAMLを使用することはできません。

答えて

2
Dim Col_Serial As DataGridComboColumn = New DataGridComboColumn() 
    Col_Serial.ItemSource = GetData(); 
    Col_Serial.SelectedValuePath = "ID_value"; 
    Col_Serial.DisplayMemberPath = "displya_col"; 
    Col_Serial.Header = "Disk4" 
    Col_Serial.Width = 40 
Col_Serial.IsEnabled= false; 
dg.Columns.Add(Col_serial); 
+0

私に簡単な例を教えてください。また、このコンボボックスは読み取り専用にする必要があります。私はユーザー入力を必要としません。つまり、IPArrayをコンボボックスにする必要があります(文字列のリスト)。私は前にそれを試したと思ったが、私は再び試してみる。 – Jasin

+0

私は近づいていると思います。私はitemsourceを外部にバインドする必要がありますか?データグリッドは同じクラス配列にバインドされているためです。私はまだデータを表示することができません。私は何をしようとしている私のコードを更新しました。 – Jasin

+0

はい。 Windowsフォームでは、コンボボックス列の各セルを繰り返し、コンボボックスとして明示的に型定義し、それぞれにデータソースを適用しました。 –

関連する問題