Не получается загрузить datagrid wpf Можете ли вы помочь? - PullRequest
0 голосов
/ 03 июля 2010

По некоторым причинам я не могу заполнить сетку данных. Я получаю следующую ошибку:

Ошибка System.Windows.Data: 40: Ошибка пути BindingExpression: свойство 'Customers' не найденоon 'object' '' ObservableCollection`1 '(HashCode = 11497055)

Можете ли вы определить, что я делаю неправильно?

Код выглядит следующим образом:

    ViewModel
    =============
        public class CustomerVM : ViewModelBase
        {
            private ObservableCollection<Customer> _customers;          
            public ObservableCollection<Customer> Customers
            {
                get { return _customers; }
                set
                {
                    _customers = value;
                    OnPropertyChanged("Customers");
                }
            }   

            private DelegateCommand _getCustomersCommand;
            public ICommand GetCustomersCommand
            {
                get
                {
                    return _getCustomersCommand ?? (_getCustomersCommand = new DelegateCommand(x => GetCustomers(), x => CanGetCustomer));
                }
            }
            private static bool CanGetCustomer
            {
                get { return true; }
            }
            private void GetCustomers()
            {
                Customers = new ObservableCollection<Customer>
                           {
                               new Customer{Id=1,Name ="Jo",Surname = "Bloggs",IsMember = true},
                               new Customer{Id=2,Name ="Mark", Surname = "Cole",IsMember = false},
                               new Customer{Id=3,Name ="Robert ", Surname = "Smith",IsMember = true},
                               new Customer{Id=4,Name ="Vincent", Surname = "Varc",IsMember = false},
                           };
            }
        }    


          Customer Wpf Window
          ====================
          <Window x:Class="Sample.CustomerDataGridSample"
            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"
            Title="CustomerDataGridSample" Height="300" Width="300" Loaded="OnWindowsLoaded" WindowStartupLocation="CenterScreen">

        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <TextBlock Text="Customers"
                       Grid.ColumnSpan="2"
                       FontWeight="Bold"
                       FontSize="12"/>
            <toolkit:DataGrid x:Name="dg" Grid.Row="1"
                               ItemsSource="{Binding Customers}"                            
                               CanUserAddRows="False" 
                               CanUserDeleteRows="False"
                               CanUserResizeRows="False" 
                               CanUserSortColumns="False"
                               AutoGenerateColumns="False"
                               RowHeaderWidth="17" RowHeight="25">
                <toolkit:DataGrid.Columns>
                    <toolkit:DataGridTextColumn   Header="Name"
                                              Binding="{Binding Path=Name}" />
                    <toolkit:DataGridTextColumn   Header="Surname"
                                              Binding="{Binding Path=Surname}" />
                    <toolkit:DataGridTextColumn   Header="Is Member"
                                              Binding="{Binding Path=IsMember}" />
                </toolkit:DataGrid.Columns>
            </toolkit:DataGrid>
        </Grid>
    </Window>

     public partial class CustomerDataGridSample:Window
    {
        public CustomerDataGridSample()
        {
            InitializeComponent();
        }
        private void OnWindowsLoaded(object sender, RoutedEventArgs e)
        {
            var customerVm = new CustomerVM();
            customerVm.GetCustomersCommand.Execute(null);
            DataContext = customerVm.Customers;
        }
    }

1 Ответ

1 голос
/ 03 июля 2010

Одно сообщение об ошибке выдает его - ваша привязка имеет неправильный контекст.

Вы устанавливаете DataContext вашего окна на customerVm.Customers в загруженном методе. Это означает, что ваши привязки «начинаются» с свойства Customers, и поэтому привязка в вашей сетке фактически пытается найти customerVm.Customers.Customers. Вот почему вы получаете сообщение об ошибке: ObservableCollection не имеет Customers свойства.

Вы можете либо изменить его так, чтобы DataContext, установленный в коде, был просто customerVm, либо использовать ItemsSource={Binding} в DataGrid (который просто выберет текущий DataContext).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...