2017-04-10 36 views
0

嘿,我是WPF的新手,所以在這裏。WPF dataGridComboBox在運行時不顯示值

我想在我的數據網格中使用組合框。我正在使用材料設計xaml datagrid。

我的XAML:

<DataGrid x:Name="dgData" 
      Margin="0 8 0 0" 
      CanUserSortColumns="False" 
      CanUserAddRows="False" 
      AutoGenerateColumns="False" 
      materialDesign:DataGridAssist.CellPadding="13 8 8 8" 
      materialDesign:DataGridAssist.ColumnHeaderPadding="8"> 
    <DataGrid.Columns>      
      <materialDesign:MaterialDataGridComboBoxColumn 
         ItemsSource="{Binding Status}" 
         Header="Status" Width="Auto" /> 
    </DataGrid.Columns> 
</DataGrid> 

而後面的代碼:

Public Sub New() 
    InitializeComponent() 
    Dim ticketsList As New List(Of TicketInfo)() 

    ticketsList.Add(New TicketInfo() With { 
     .Subject = "IE Not Working", 
     .RaisedBy = "User 1", 
     .Status = New ObservableCollection(Of String)() From {"Frederick", "Baltimore", "Rockville"} 
    }) 

    dgData.ItemsSource = ticketsList 
    [more code follows....] 
} 

和類:

Public Class TicketInfo 
    Public Property Subject() As String 
     Get 
      Return m_Subject 
     End Get 
     Set 
      m_Subject = Value 
     End Set 
    End Property 
    Private m_Subject As String 
    Public Property RaisedBy() As String 
     Get 
      Return m_RaisedBy 
     End Get 
     Set 
      m_RaisedBy = Value 
     End Set 
    End Property 
    Private m_RaisedBy As String 
    Public Property Status() As ObservableCollection(Of String) 
     Get 
      Return m_Status 
     End Get 
     Set 
      m_Status = Value 
     End Set 
    End Property 
    Private m_Status As ObservableCollection(Of String) 
End Class 

現在,當我運行這個它看起來像這樣:

enter image description here

那麼,我在這裏錯過了什麼?

+0

已經設置您的DisplayMemberPath和SelectedValuePath? –

回答

0

你必須使用ObservableCollection而不是List

而且你要實現你的模型類的接口INotifyPropertyChangeddoc & example about INotifyPropertyChanged

UPDATE

您不必執行INotifyPropertyChanged如果你永遠不想在初始化後更改ticketsList,但是您必須將List更改爲ObservableCollection。 你只需要創建並在ticketsListInitializeComponent()

+0

我改變了**昏暗的ticketsList作爲新的ObservableCollection(的TicketInfo)()**,但我仍然沒有得到任何東西在下拉列表中。 – StealthRT

+0

好的,但你初始化並將其添加到'InitializeComponent()'之前? – Safe

+0

對其進行調整,設置rhe屬性,initalizecomponets,然後添加到itemssource。仍然沒有數據。 – StealthRT

0

一個DataGridColumn不是一個視覺元素,並不會繼承DataContext補充。我不知道該MaterialDataGridComboBoxColumn,但使用內置DataGridComboBoxColumn類,你可以定義一個ElementStyleEditingElementStyle,設置生成的組合框的ItemsSource屬性:

<DataGrid x:Name="dgData" 
      Margin="0 8 0 0" 
      CanUserSortColumns="False" 
      CanUserAddRows="False" 
      AutoGenerateColumns="False" 
      materialDesign:DataGridAssist.CellPadding="13 8 8 8" 
      materialDesign:DataGridAssist.ColumnHeaderPadding="8"> 
    <DataGrid.Columns> 
     <DataGridComboBoxColumn Header="Status" Width="Auto"> 
      <DataGridComboBoxColumn.ElementStyle> 
       <Style TargetType="ComboBox"> 
        <Setter Property="ItemsSource" Value="{Binding Status}" /> 
       </Style> 
      </DataGridComboBoxColumn.ElementStyle> 
      <DataGridComboBoxColumn.EditingElementStyle> 
       <Style TargetType="ComboBox"> 
        <Setter Property="ItemsSource" Value="{Binding Status}" /> 
       </Style> 
      </DataGridComboBoxColumn.EditingElementStyle> 
     </DataGridComboBoxColumn> 
    </DataGrid.Columns> 
</DataGrid> 
+0

之間他沒有使用'DataContext',而是'Datagrid'' ItemsSource' – Safe