Как я могу определить свои собственные столбцы в WPF DataGrid? - PullRequest
8 голосов
/ 24 марта 2009

У меня AutoGenerateColumns WPF-DataGrid, привязанный в коде позади к LINQ-to-SQL, который отлично работает.

Но когда я снимаю AutoGenerateColumns и определяю свои собственные столбцы, он говорит мне: " Коллекция элементов должна быть пустой перед использованием ItemsSource. "

Но я не связываю ItemSource в своем XAML, поэтому не понимаю, почему он не пустой. Что мне нужно изменить, чтобы я мог определять свои собственные столбцы?

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>

код-за:

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

1 Ответ

22 голосов
/ 24 марта 2009

Вы пытаетесь поместить столбец непосредственно в DataGrid (поэтому он пытается поместить столбец в коллекцию Items сетки, и это объясняет вашу ошибку). Вам нужно положить его в коллекцию 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...