2017-04-10 35 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