我有一个要求,我需要按原样显示DataTable
的数据,即不需要对单元格进行编辑。另一个要求是我需要将Combobox
显示为每列的标题。
其次,第一列需要是checkbox
,检查哪一行是灰色的。我认为DataGrid
应该是可行的,但我不确定,因为我无法找到办法。
可以请有人帮帮我。请注意,我希望以MVVM方式执行此操作,而不是在xaml.cs中编写代码
热切期待回应。
提前致谢。
编辑:代码虽然增加不多...... 的.xaml
<DataGrid HorizontalAlignment="Left" Margin="0,274,0,0" VerticalAlignment="Top" Height="321" Width="981" AutoGenerateColumns="True" ItemsSource="{Binding Path=UploadedProductData, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}">
<DataGrid.Columns>
<DataGridTemplateColumn CanUserReorder="False" CanUserResize="False">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<ComboBox HorizontalAlignment="Right" VerticalAlignment="Top" Width="100"/>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="" VerticalAlignment="Top"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
在主窗口的视图模型中 -
DataTable _uploadedProductData;
public DataTable UploadedProductData
{
get { return _uploadedProductData; }
set
{
_uploadedProductData = value;
}
}
以上是财产。
在xaml.cs中 - 我设置了上面的属性 - 在一些按钮事件
上 ViewModel.UploadedProductData = dt;
答案 0 :(得分:0)
您在要求中声明的所有内容都完全可以在WPF中使用。 WPF可以实现大多数功能。现在您已经提供了一些代码,我可以看到您缺少所需的INotifyPropertyChanged
界面...单击链接以获取此帮助。您需要实现此功能,以便在属性值更改后更新UI ...您是否看到包含代码示例的方式已经为您工作了?
确实可以创建DataTemplate
来定义Header
DataGrid
部分中显示的内容。您可以将DataTemplate
视为特定数据的微小视图,并且可以使用DataTemplate
属性将Header
设置为DataGrid.RowHeaderTemplate
,因为您几乎已经获得了:
<DataGrid>
<DataGrid.RowHeaderTemplate>
<DataTemplate>
<!--Define how you want the header to look here-->
<DataTemplate>
</DataGrid.RowHeaderTemplate>
</DataGrid>
现在,当涉及到绑定到单元格时,它实际上取决于您正在使用的对象。在WPF中,通常(但不是强制性的)创建准确表示数据的数据类型对象。在您的情况下,我将假设您将只使用您的DataTable
对象,因此列名称很重要。
最好使用DataGridTextColumn
列来显示文字, 也可以选择使用DataGridTextColumn.HeaderTemplate
,如果您希望Header
成为<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=ColumnName0}">
<DataGridTextColumn.HeaderTemplate>
<ComboBox HorizontalAlignment="Right" VerticalAlignment="Top" Width="100"/>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>
<DataGridTextColumn Header="First Name" Binding="{Binding Path=ColumnName1}" />
<DataGridTextColumn Header="Last Name" Binding="{Binding Path=ColumnName2}" />
</DataGrid.Columns>
不同列的不同之处:
ComboBox.ItemsSource
现在我猜你接下来要问如何填充{{1}}项目集合,但我已经没时间了。为此,我会将您推荐到WPF ComboBox in DataGridTemplateColumn with alternate ItemsSource帖子并说如果这对您没有帮助,您可以通过互联网搜索轻松找到此信息。