【发布时间】:2016-09-23 01:31:53
【问题描述】:
大家好,我想知道为什么我的ListView 加载为空白。
我创建了一个ObjectDataProvider,它从我的控制器加载Articulos 列表中的DataTable
TrabajarArticulos.cs
namespace ClasesBase
{
public class TrabajarArticulos
{
public static DataTable TraerArticulos()
{
SqlConnection cnn = new SqlConnection(ClasesBase.Properties.Settings.Default.conexion);
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "SELECT * FROM Articulo";
cmd.CommandType = CommandType.Text;
cmd.Connection = cnn;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
}
}
Articulos.xaml
<Window.Resources>
<ObjectDataProvider x:Key="lista_articulos" ObjectType="{x:Type svc:TrabajarArticulos}" MethodName="TraerArticulos"></ObjectDataProvider>
</Window.Resources>
这用于ListView中的相同窗口
<ListView Name="ListArt"
ItemsSource="{Binding Source={StaticResource ResourceKey=lista_articulos}}"
Margin="360,61,22,184">
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn Header="Id" Width="50" DisplayMemberBinding="{Binding Path=Art_Id}"></GridViewColumn>
<GridViewColumn Header="Descripcion" Width="100" DisplayMemberBinding="{Binding Path=Art_Descrip}"></GridViewColumn>
</GridView.Columns>
</GridView>
</ListView.View>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListViewItem_PreviewMouseLeftButtonDown" />
</Style>
</ListView.ItemContainerStyle>
</ListView>
但是当它加载时它是空白的(不是空的)Example
我的第一个想法是它无法加载,但使用PreviewMouseLeftButtonDown 进行调试我可以看到我的数组的值。
还尝试使用DataContext 代替ItemsSource,但仍然没有结果。
甚至认为我在GridViewColumn 上绑定错误,但仍然没有运气。
知道我做错了什么吗?
编辑我注意到,如果我手动添加我的对象Articulo,它显示得很好。现在让我更加迷失在哪里出了问题。
ListArt.Items.Add(articulo);
解决方案
感谢 jstreet 的反馈,我发现了非常基本的问题。
DataTable 中的所有 ColumnName 都是小写字母,而不是大写字母作为我的模型。
所以GridViewColumn 应该是这样的:
<GridViewColumn Header="Id" Width="50" DisplayMemberBinding="{Binding Path=art_id}"></GridViewColumn>
<GridViewColumn Header="Descripcion" Width="100" DisplayMemberBinding="{Binding Path=art_descrip}"></GridViewColumn>
【问题讨论】:
-
通过
<DataGrid ItemsSource="{Binding Source={StaticResource ResourceKey=lista_articulos}}"/>查看。 -
我试过了,仍然显示为空
-
从您的方法中返回
System.Data.DataView并使用return dt.DefaultView;然后将其与DataGrid一起使用。