2009-02-26 71 views
2

我在WPF中设置了LINQ-to-SQL/NorthWind。为什么我可以绑定到ListBox但不能绑定到WPF中的DataGrid?

ListBox显示数据,但DataGrid没有(没有错误,只是不显示任何东西)。

我引用了WPFToolkit.dll。

为什么DataGrid没有显示ListBox可以显示的数据?

XAML:

<Window x:Class="TestLinq343.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:dg="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit" 
    Title="Window1" Height="300" Width="300"> 
    <Window.Resources> 
     <DataTemplate x:Key="ShowCustomer"> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding CategoryID}"/> 
       <TextBlock Text=": "/> 
       <TextBlock Text="{Binding ProductName}"/> 
      </StackPanel> 
     </DataTemplate> 
    </Window.Resources> 
    <Grid> 
     <dg:DataGrid x:Name="TheDataGrid" AutoGenerateColumns="True"></dg:DataGrid> 
     <ListBox x:Name="TheListBox" ItemTemplate="{StaticResource ShowCustomer}"/> 
    </Grid> 
</Window> 

后面的代码:

using System.Linq; 
using System.Windows; 
using TestLinq343.Model; 
using Microsoft.Windows.Controls; 

namespace TestLinq343 
{ 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 

      NorthwindDataContext db = new NorthwindDataContext(); 
      var sortedProducts = 
       from p in db.Products 
       orderby p.UnitsInStock descending 
       select p; 

      TheDataGrid.ItemsSource = sortedProducts; 
      TheListBox.ItemsSource = sortedProducts; 
     } 
    } 
} 

回答

1

这只是一个XAML的问题,这修复它:

<ScrollViewer> 
    <StackPanel> 
     <dg:DataGrid x:Name="TheDataGrid"/> 
     <ListView x:Name="TheListView" ItemTemplate="{StaticResource ShowCustomer}"/> 
    </StackPanel> 
</ScrollViewer> 
0

也许是因为你没有specifiy DataGrid列。尝试将datagrids AutoGenerateColumns属性设置为true。

+0

试过了,还是空白,是的AutoGenerateColumns true时默认情况下,我在下面演练http://windowsclient.net/wpf/ wpf35/wpf-35sp1-toolkit-datagrid-feature-walkthrough.aspx,它定义了XAML中的ItemsSource,但应该不重要,应该如何? – 2009-02-26 14:46:07