带有预选值组合框的 DataGridTemplateColumn

DataGridTemplateColumn with combobox with preselected value

我是 WPF 新手,想将组合框绑定到具有 DataGridTemplateColumn 的数据网格。我没有使用 MVVM。 我正在从数据库中读取一个值,并希望将该值显示为模板列中的预选值。不幸的是,我只找到了使用 TextBlock 作为单元格模板的解决方法。

是否也可以直接使用Combobox作为celltemplate,定义预选Item?我没能使用 SelectedItem、SelectedValue、...

我也尝试过使用 datagridcomboboxcolumn,但这对初学者来说太复杂了。

XAML:

  <DataGrid x:Name="dataGridComponents" AutoGenerateColumns="False"  CanUserReorderColumns="False" CanUserAddRows="False" IsReadOnly="False" SelectionUnit="Cell" DataGridCell.Selected="DataGridCell_Selected">
      <DataGrid.Columns>
           <DataGridTemplateColumn Header="Dropdown column"  >
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>                                                                 
                                <TextBlock Text="{Binding status}" VerticalAlignment="Center" />                                                                
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                    <DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <ComboBox SelectedValue="{Binding status, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}"
                              SelectedValuePath="Content">                                
                                <ComboBoxItem Content="Test" Tag="1" />             
                                <ComboBoxItem Content="Old" Tag="4" />
                            </ComboBox>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellEditingTemplate>
                </DataGridTemplateColumn>
     </DataGrid.Columns>

后面的代码:

        DataTable mycomponents = m_db.SelectQuery("Select * FROM test WHERE name='test';");
        dataGridComponents.ItemsSource = mycomponents.DefaultView;            
        dataGridComponents.DataContext = mycomponents.DefaultView;

status 指的是 DataTable 中包含当前选定值的列。

您需要使用相同类型的值填充 ComboBox。例如,如果 status 是一个字符串:

<ComboBox xmlns:sys="clr-namespace:System;assembly=mscorlib"
          SelectedItem="{Binding status}">
    <sys:String>Test</sys:String>
    <sys:String>Old</sys:String>
</ComboBox>