WPF dataGridComboBox在运行时不显示值

时间:2017-04-10 06:44:06

标签: wpf vb.net xaml datagrid material-design-in-xaml

嘿,我是WPF的新手,所以这里就是。

我想在我的数据网格中使用组合框。我正在使用材料设计xaml datagrid。

我的XAML:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8"/>
    <title>Welcome to CodeIgniter</title>
    <?php echo $map['js'];?>
</head>
<body>

<div id="container">
    Welcome to GoogleMAp
    <?php echo $map['html'];?>
</div>

</body>
</html>

代码背后:

<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....]
}

现在,当我运行它时,它看起来像这样:

enter image description here

那么,我在这里错过了什么?

2 个答案:

答案 0 :(得分:0)

您必须使用ObservableCollection而不是列表

您必须在模型类doc & example about INotifyPropertyChanged

上实现接口INotifyPropertyChanged

<强>更新

如果您在初始化INotifyPropertyChanged之后永远不想更改,则无需实施ticketsList,但无论如何都必须将List更改为ObservableCollection。 您只需在ticketsList

之前创建并添加InitializeComponent()即可

答案 1 :(得分:0)

DataGridColumn不是视觉元素,不会继承DataContext。我不知道MaterialDataGridComboBoxColumn,但使用内置的DataGridComboBoxColumn类,您可以定义ElementStyleEditingElementStyle来设置ItemsSource属性生成的ComboBox:

<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>