2009-03-24 9 views
8

Ich habe ein AutoGenerateColumns WPF-DataGrid in Code-Behind gebunden an LINQ-zu-SQL, das funktioniert gut.Wie kann ich meine eigenen Spalten in einem WPF DataGrid definieren?

Aber wenn ich aus den AutoGenerateColumns nehmen und meine eigenen Spalten definieren, es sagt ich „Die Artikel Sammlung vor der Verwendung Itemssource muss leer sein.

Aber ich bin nicht die ItemSource in meinem XAML Bindung so Ich sehe nicht, warum es nicht leer ist. Was muss ich ändern, damit ich meine eigenen Spalten definieren kann?

XAML:

<UserControl x:Class="TestDataGrid566.AppPages.ManageCustomers" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit" 
      Loaded="UserControl_Loaded"> 
    <toolkit:DataGrid x:Name="TheDataGrid" 
         CanUserAddRows="False" 
         AlternatingRowBackground="#ddd" 
         CanUserSortColumns="true" 
         PreviewKeyDown="TheDataGrid_PreviewKeyDown" 
         AutoGenerateColumns="False" 
         RowEditEnding="TheDataGrid_RowEditEnding"> 

     <toolkit:DataGridTextColumn Header="Contact Name" Width="SizeToCells" 
            Binding="{Binding ContactName}" 
            IsReadOnly="False"/> 
    </toolkit:DataGrid> 
</UserControl> 

Code-Behind:

public partial class ManageCustomers : UserControl 
{ 
    private NorthwindDataContext _db = new NorthwindDataContext(); 

    public ManageCustomers() 
    { 
     InitializeComponent(); 
    } 

    private void UserControl_Loaded(object sender, RoutedEventArgs e) 
    { 
     LoadData(); 
    } 

    public void LoadData() 
    { 
     var customers = from c in _db.Customers 
         select c; 
     TheDataGrid.ItemsSource = customers.ToList(); 
    } 
} 

Antwort

22

Sie versuchen, die Spalte setzen direkt in die DataGrid (daher die Spalte setzen es versucht, in die Items Sammlung des Rasters und das erklärt Ihren Fehler). Sie müssen es in die Columns Sammlung setzen:

<toolkit:DataGrid x:Name="TheDataGrid" 
          CanUserAddRows="False" 
          AlternatingRowBackground="#ddd" 
          CanUserSortColumns="true" 
          PreviewKeyDown="TheDataGrid_PreviewKeyDown" 
          AutoGenerateColumns="False" 
          RowEditEnding="TheDataGrid_RowEditEnding"> 
    <toolkit:DataGrid.Columns>   
     <toolkit:DataGridTextColumn Header="Contact Name" Width="SizeToCells" 
             Binding="{Binding ContactName}" 
             IsReadOnly="False"/> 
    </toolkit:DataGrid.Columns> 
</toolkit:DataGrid> 
Verwandte Themen