2009-03-24 30 views
8

Tôi đã nhận được AutoGenerateColumns WPF-DataGrid bị ràng buộc trong mã sau LINQ-to-SQL, hoạt động tốt.Làm thế nào tôi có thể xác định các cột của riêng mình trong một DataGrid WPF?

Nhưng khi tôi cởi AutoGenerateColumns và xác định các cột của riêng tôi, nó nói với tôi "Bộ sưu tập các mặt hàng phải được sản phẩm nào trước khi sử dụng ItemsSource."

Nhưng tôi không ràng buộc ItemSource trong XAML của tôi vì vậy Tôi không hiểu tại sao nó không trống rỗng. Tôi cần thay đổi gì để tôi có thể xác định các cột của riêng mình?

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

Trả lời

22

Bạn đang cố gắng để đưa các cột trực tiếp vào DataGrid (do đó nó đang cố gắng để đưa các cột trong bộ sưu tập Items của lưới và giải thích lỗi của bạn). Bạn cần phải đặt nó bên trong bộ sưu tập 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> 
Các vấn đề liên quan