2009-03-24 18 views
8

Tengo un AutoGenerateColumns WPF-DataGrid enlazado en código subyacente a LINQ-to-SQL, que funciona bien.¿Cómo puedo definir mis propias columnas en WPF DataGrid?

Pero cuando me quito el AutoGenerateColumns y definir mis propias columnas, me dice que "La colección de artículos debe estar vacío antes de usar ItemsSource."

pero no soy la unión del ItemSource en mi XAML por lo No veo por qué no está vacío. ¿Qué debo cambiar para poder definir mis propias columnas?

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> 

de código subyacente:

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(); 
    } 
} 

Respuesta

22

Usted está tratando de poner la columna directamente en el DataGrid (por lo tanto, está tratando de poner la columna en la colección Items de la grilla y eso explica su error). Debe colocarlo dentro de la colección Columns:

<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> 
Cuestiones relacionadas