【发布时间】:2017-05-14 21:12:25
【问题描述】:
我的 XAML 如下:
<DataGrid x:Name="WaterfallDataGrid" HorizontalAlignment="Left" Height="540" Margin="10,410,0,0" VerticalAlignment="Top" Width="1650" CanUserSortColumns="False" ColumnWidth="60">
<DataGrid.Columns>
<DataGridTextColumn Header="Load" Binding="{Binding Load}"></DataGridTextColumn>
<DataGridTextColumn Header="PF" Binding="{Binding PF}"></DataGridTextColumn>
<DataGridTextColumn Header="Spare" Binding="{Binding Spare}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
我的VB.net代码如下:
Dim dt3 As New DataTable("Waterfall")
dt3.Columns.Add("Load")
dt3.Columns.Add("PF")
dt3.Columns.Add("Spare")
dt3.rows.add(New Objecet() {"full load", "0.8", "20%"})
WaterfallDataGrid.itemSource = dt3.defaultview
虽然数据表确实显示在数据网格上,但除了我在 XAML 中创建的原始 3 列之外,它还会创建另外 3 个新列(Load、PF 和 Spar)。
如何将 VB.net 代码绑定到 XAML 数据网格?
这是 Ed 的代码截图
这是我根据 Mark 的评论修改的代码。
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Datagrid_Binding"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid x:Name="WaterfallDataGrid" HorizontalAlignment="Left" Height="170" Margin="85,65,0,0" VerticalAlignment="Top" Width="340" AutoGenerateColumns="False"/>
<Button x:Name="button" Content="Button" HorizontalAlignment="Left" Height="25" Margin="380,255,0,0" VerticalAlignment="Top" Width="45"/>
</Grid>
</Window>
这是VB代码
Class MainWindow
Private Sub button_Click(sender As Object, e As RoutedEventArgs) Handles button.Click
Dim dt3 As New DataTable("Waterfall")
dt3.Columns.Add("Load")
dt3.Columns.Add("PF")
dt3.Columns.Add("Spare")
'dt3.rows.add(New Object() {"full load", "0.8", "20%"})
dt3.Rows.Add("full load", "0.8", "20%")
WaterfallDataGrid.ItemsSource = dt3.DefaultView
End Sub
End Class
数据网格根本不显示任何数据。它以某种方式显示折叠的行。截图如下:
我认为问题在于,如果我没有在 XAML 中预定义列并且我在 vb.net 中定义了行但 autogeneratecolumn 设置为 false,则 VB 无法以编程方式创建列在运行时,所以我在这里看到的是折叠的行。
我认为该方法是在 XAML 中预定义列,然后将数据绑定到 XAML 列,但没有任何代码起作用....真是令人沮丧。
【问题讨论】:
-
我现在正在测试您的代码,它的工作方式与您发布的方式完全相同。对于我对匿名对象的错误建议浪费您的时间,我深表歉意。不幸的是,这里肯定有其他原因导致了这个问题,但是如果没有看到足够大的代码示例来重现这个问题,我无法告诉你它可能是什么。
-
...请注意,我更正了拼写错误“Objecet”和“itemSource”。但如果没有这些修复,它甚至无法编译,所以我想当你在这里重新输入代码时它们一定是悄悄溜进来的。
-
对不起,埃德。这是我的错字,但 VS 中没有错字,因为否则无法编译。
标签: wpf vb.net xaml binding datagrid