0

我有一个要求,我需要按原样显示来自 a 的数据DataTable,即不需要对单元格进行编辑。另一个要求是我需要显示Combobox为每列的标题。其次, The First Column 必须是 a 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;
4

1 回答 1

0

您在要求中陈述的所有内容在 WPF 中都是完全可能的。大多数事情都可以使用 WPF。现在您已经提供了一些代码,我可以看到您缺少所需的INotifyPropertyChanged界面...单击链接以获取帮助。您需要实现此功能以在属性值更改后更新 UI...您是否看到包含代码示例已经为您工作?

确实可以创建 a来定义在a 部分中DataTemplate看到的内容。您可以将 a视为特定数据的一个小视图,并且您可以将 a 设置为using属性,因为您几乎得到了:HeaderDataGridDataTemplateDataTemplateHeaderDataGrid.RowHeaderTemplate

<DataGrid>
    <DataGrid.RowHeaderTemplate>
        <DataTemplate>
            <!--Define how you want the header to look here-->
        <DataTemplate>
    </DataGrid.RowHeaderTemplate>
</DataGrid>

现在,当涉及到绑定到单元格时,它实际上取决于您使用的对象。在 WPF 中,习惯(但不是强制)创建准确表示您的数据的数据类型对象。在您的情况下,我将假设您将只使用您的DataTable对象,因此列名很重要。

最好使用该DataGridTextColumn列来显示文本,如果您希望不同的列不同,您可以选择使用该列:DataGridTextColumn.HeaderTemplateHeader

<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接下来如何填充项目集合,但我的时间不多了。为此,我将向您推荐 DataGridTemplateColumn 中的 WPF ComboBox 以及备用 ItemsSource帖子,并说如果这对您没有帮助,您可以从 Internet 搜索中轻松找到此信息。

于 2013-10-09T10:55:53.023 回答