BindingExpression路径错误

有很多类似的问题,我从这些问题中尝试了很多答案,但到目前为止没有任何帮助。 我不明白错误信息实际意味着什么。 错误信息是;

System.Windows.Data Error: 40 : BindingExpression path error: 'CategoryModel' property not found on 'object' ''String' (HashCode=-57655201)'. BindingExpression:Path=CategoryModel.CategoryList; DataItem='String' (HashCode=-57655201); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String') 

CategoryList包含已填充的类别的字符串列表(从调试中检查)。 我的xaml在下面,

   

xaml设计看起来不错,应用程序运行正常,但没有任何东西被填满。 应该在初始化时填充categoryList。 它实际填充但listView没有显示任何内容。

编辑:

CategoryModel;

 using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace RecorderApp.Model { public class CategoryModel : INotifyPropertyChanged { private String _selectedCategory; private String _recordTitle; private String _systemInfoLabel; private ObservableCollection _categoryList; public ObservableCollection CategoryList { get { return _categoryList; } set { if (_categoryList != value) { _categoryList = value; OnPropertyChanged("CategoryList"); } } } public String SystemInfoLabel { get { return _systemInfoLabel; } set { if (_systemInfoLabel != value) { _systemInfoLabel = value; OnPropertyChanged("SystemInfoLabel"); } } } public String SelectedCategory { get { return _selectedCategory; } set { if (_selectedCategory != value) { _selectedCategory = value; OnPropertyChanged("SelectedCategory"); } } } public string RecordTitle { get { return _recordTitle; } set { _recordTitle = value; OnPropertyChanged("RecordTitle"); } } public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } } } 

您的DisplayMemberPath绑定导致错误,在您的情况下应该完全删除,因为它不需要。

要使用DisplayMemberPath ,您需要能够引用像ListView.ItemsSource[X].SomeProperty这样的属性,其中ListView.ItemsSource[X].SomeProperty将是您的DisplayMemberPath

您收到此错误是因为您的ItemsSourceList ,并且String不包含名为CategoryModel的属性。

要解释您遇到的确切绑定错误:

System.Windows.Data错误:40:BindingExpression路径错误:’object”’String’(HashCode = -57655201)’上找不到’CategoryModel’属性。 BindingExpression:路径= CategoryModel.CategoryList; DataItem =’String’(HashCode = -57655201); target元素是’TextBlock’(Name =”); target属性是’Text’(类型’String’)

  • 这一行意味着它无法在对象String上找到属性CategoryModel

    BindingExpression路径错误:’object”’String’上找不到’CategoryModel’属性(HashCode = -57655201)’

  • 此行包含抛出错误的绑定表达式的Path属性

    BindingExpression:路径= CategoryModel.CategoryList;

  • 此行告诉您抛出错误的绑定的Source对象(通常是DataContext

    DataItem =’String’(HashCode = -57655201);

  • 这一行意味着它无法绑定TextBox上的属性TextDisplayMemberPath是使ItemTemplate成为单个TextBlock的快捷方式,其中Text绑定到DisplayMemberPath属性)

    target元素是’TextBlock’(Name =”); target属性是’Text’(类型’String’)

所以要把它们放在一起,它告诉你它正在尝试将TextBox.Text绑定到{Binding Path=CategoryModel.CategoryList} ,但TextBox后面的DataContextString类型,而String没有名为CategoryModel的属性

下面的静态绑定也可以帮到你。