Wie zu beheben einem "Verbindlichen Ausdruck Weg Fehler" in WPF?

Ich bin die Bindung eines observsable Sammlung von Modell-Objekte zu einem Daten-grid. Aber wenn ich die Bindung an die Sammlung, bekomme ich einen Pfad-Fehler in der peoprties.

Debuggen dieses Problem, habe ich überprüft, dass die öffentlichen Eigenschaften, die in der CustomerModel sind korrekt benannt, in die DataGrid binden. Und auch, dass die Sammlung wieder zu dem Modell ist nicht leer. Ich habe auch überprüft, dass die Daten der Kontext korrekt eingestellt ist, in die Ansicht code.

Denke ich, es wäre ein Fehler wegen der Art, wie ich angegeben habe verbindlich Pfad in xaml..

Die vollständigen details der Bindung Fehlermeldung lautet wie folgt, für jedes Feld:

System.Windows.Data Error: 40 : BindingExpression path error: 'FirstName' property not found on 'object' ''MainViewModel' (HashCode=55615518)'. BindingExpression:Path=FirstName; DataItem='MainViewModel' (HashCode=55615518); target element is 'TextBox' (Name='fNameTbx'); target property is 'Text' (type 'String')

System.Windows.Data Error: 40 : BindingExpression path error: 'LastName' property not found on 'object' ''MainViewModel' (HashCode=55615518)'. BindingExpression:Path=LastName; DataItem='MainViewModel' (HashCode=55615518); target element is 'TextBox' (Name='lNameTbx'); target property is 'Text' (type 'String')

System.Windows.Data Error: 40 : BindingExpression path error: 'Email' property not found on 'object' ''MainViewModel' (HashCode=55615518)'. BindingExpression:Path=Email; DataItem='MainViewModel' (HashCode=55615518); target element is 'TextBox' (Name='emailTbx'); target property is 'Text' (type 'String')

Kann jemand mich in die richtige Richtung, um zu Debuggen weiter?

DataGrid binden Pfad und Quelle sind wie folgt festgelegt:

                   <DataGrid Name="infogrid"
                              Grid.Row="0"
                              Grid.RowSpan="3"
                              Grid.Column="1"
                              Grid.ColumnSpan="3"
                              AutoGenerateColumns="False"
                              ItemsSource="{Binding Customers}"
                              SelectedItem="{Binding SelectedCustomer}">
                        <DataGrid.Columns>
                            <DataGridTextColumn Binding="{Binding Customers.Id}" Header="ID" />
                            <DataGridTextColumn Binding="{Binding Customers.FirstName}" Header="First Name" />
                            <DataGridTextColumn Binding="{Binding Customers.LastName}" Header="Last Name" />
                            <DataGridTextColumn Binding="{Binding Customers.Email}" Header="Email" />
                        </DataGrid.Columns>
                    </DataGrid>

View-Modell enthält eine Observable-collection von Typ CustomerModel, Kunden genannt. Dies ist, was ich eingestellt habe das DataGrid ItemSource an. (Habe ich entfernt andere code von VM für die Lesbarkeit)

namespace MongoDBApp.ViewModels
{

    class MainViewModel : INotifyPropertyChanged
    {

        public event PropertyChangedEventHandler PropertyChanged = delegate { };
        private ICustomerDataService _customerDataService;


        public MainViewModel(ICustomerDataService customerDataService)
        {
            this._customerDataService = customerDataService;
            QueryDataFromPersistence();
        }



        private ObservableCollection<CustomerModel> customers;
        public ObservableCollection<CustomerModel> Customers
        {
            get
            {
                return customers;
            }
            set
            {
                customers = value;
                RaisePropertyChanged("Customers");
            }
        }



        private void QueryDataFromPersistence()
        {
            Customers = _customerDataService.GetAllCustomers().ToObservableCollection();

        }



        private void RaisePropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }



    }
}

Und dies sind die Felder, die in der CustomerModel, also nicht sicher, warum die Eigenschaften nicht gefunden werden, während Bindung:

   public class CustomerModel : INotifyPropertyChanged
    {

        private ObjectId id;
        private string firstName;
        private string lastName;
        private string email;


        [BsonElement]
        ObservableCollection<CustomerModel> customers { get; set; }

        ///<summary>
        ///This attribute is used to map the Id property to the ObjectId in the collection
        ///</summary>
        [BsonId]
        public ObjectId Id { get; set; }

        [BsonElement("firstName")]
        public string FirstName
        {
            get
            {
                return firstName;
            }
            set
            {
                firstName = value;
                RaisePropertyChanged("FirstName");
            }
        }

        [BsonElement("lastName")]
        public string LastName
        {
            get
            {
                return lastName;
            }
            set
            {
                lastName = value;
                RaisePropertyChanged("LastName");
            }
        }

        [BsonElement("email")]
        public string Email
        {
            get
            {
                return email;
            }
            set
            {
                email = value;
                RaisePropertyChanged("Email");
            }
        }


        public event PropertyChangedEventHandler PropertyChanged;
        private void RaisePropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }

Dies ist, wie die Daten-Rahmen ist in die Ansicht code hinter:

    public partial class MainView : Window
    {
        private MainViewModel ViewModel { get; set; }
        private static ICustomerDataService customerDataService = new CustomerDataService(CustomerRepository.Instance);


        public MainView()
        {
            InitializeComponent();
            ViewModel = new MainViewModel(customerDataService);
            this.DataContext = ViewModel;

        }

    }          
können Sie uns die relevanten xaml?
gerade bearbeitet die post zu zählen xaml.
Ich Denke, du bist etwas fehlt auf Ihrem Fenster.DataContext, ich kopiert Ihre Quelle und konnte das problem nicht reproduzieren. Entfernen Sie auch die Manuelle definition für die Spalte AutoGenerateColumns="True" ist genug, um zu sehen, Ihre datagrid funktioniert
Ich habe den code auf meine Frage, zeigt, wie ich den Daten-Kontext. Ich bin verwirrt, was das Problem ist hier, das grid gebunden ist, um die Abholung durch Kunden in der MainVM. Die Tabellenspalten sind dann an jedem Feld aus dieser Sammlung. Aber ich bekomme immer noch diese Bindung Pfad-Ausdruck. Sollte ich das definieren jedes Modell die Felder in der VM auch?
Versuchen Sie, füllen Sie Ihre observable-Auflistung mit Konstante Daten. entfernen Sie die CustomerDataService aus dem code. und füllen Sie es mit etwas wie : Kunden = new ObservableCollection<CustomerModel> { neue CustomerModel() {FirstName = "myname", LastName = "myfamily"}, new CustomerModel() {FirstName = "yourname", LastName = "yourfamily"} };

InformationsquelleAutor Brian J | 2015-11-19

Schreibe einen Kommentar