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
您收到此错误是因为您的ItemsSource
是List
,并且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
上的属性Text
(DisplayMemberPath
是使ItemTemplate
成为单个TextBlock
的快捷方式,其中Text
绑定到DisplayMemberPath
属性)target元素是’TextBlock’(Name =”); target属性是’Text’(类型’String’)
所以要把它们放在一起,它告诉你它正在尝试将TextBox.Text
绑定到{Binding Path=CategoryModel.CategoryList}
,但TextBox
后面的DataContext
是String
类型,而String
没有名为CategoryModel
的属性
下面的静态绑定也可以帮到你。