如何解决 WPF 中的“绑定表达式路径错误”?

2024-04-19

我将模型对象的可观察集合绑定到数据网格。但是当我将绑定设置到集合时,我收到了指向人员的路径错误。

在调试此问题时,我检查了 CustomerModel 中的公共属性在 DataGrid 绑定中是否正确命名。而且返回到模型的集合不为空。我还检查了视图后面的代码中的数据上下文是否设置正确。

我认为由于我在 xaml 中指定绑定路径的方式,这可能是一个错误。

每个字段的绑定错误的完整详细信息如下:

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')

有人能指出我正确的方向,以便进一步调试吗?

DataGrid绑定路径和源设置如下:

                   <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>

视图模型包含一个 CustomerModel 类型的 Observable 集合,称为 Customers。这就是我将 DataGrid ItemSource 设置为的内容。 (为了便于阅读,我从虚拟机中删除了其他代码)

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



    }
}

这些是 CustomerModel 中的字段,因此不确定为什么在绑定过程中找不到这些属性:

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

这是在视图后面的代码中设置数据上下文的方式:

    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;

        }

    }          

这些绑定错误与您的 DataGrid 无关。

它们表明您在名称的某处有 3 个文本框fNameTbx, lNameTbx, and emailTbx。 DataGrid 不会生成具有 Name 属性的项目,因此它不是导致这些绑定错误的原因。

当尝试读取绑定错误时,最好用分号将它们分开并向后读取,如下所示here https://stackoverflow.com/a/14523290/302677.

例如,

System.Windows.Data 错误:40:BindingExpression 路径错误:在“对象”“MainViewModel”(HashCode=55615518) 上找不到“FirstName”属性。 BindingExpression:Path=名字; DataItem='MainViewModel'(哈希码=55615518);目标元素是“TextBox”(名称=“fNameTbx”);目标属性是“文本”(类型“字符串”)

也可以读作

  • 目标属性是“文本”(类型“字符串”)
  • 目标元素是“TextBox”(名称=“fNameTbx”);
  • DataItem='MainViewModel'(哈希码=55615518);
  • BindingExpression 路径错误:在“对象”“MainViewModel”(HashCode=55615518) 上找不到“FirstName”属性。 BindingExpression:Path=名字;

意思是你在某个地方

<TextBox Name="fNameTbx" Text="{Binding FirstName}" />

哪里的DataContext此文本框的类型为MainViewModel. And MainViewModel没有以下属性FirstName.

我建议在您的项目中搜索这些名称,或者您可以使用类似的工具Snoop https://snoopwpf.codeplex.com/在运行时调试数据绑定和 DataContext 问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解决 WPF 中的“绑定表达式路径错误”? 的相关文章

  • WPF 中的自动展开树视图

    有没有办法在 WPF 中自动展开树视图中的所有节点 我搜索了 甚至没有在 treeview 属性中找到展开功能 Thanks 您可以设置 ItemContainerStyle 并使用 IsExpanded 属性
  • 在 WPF FlowDocument 中的指定位置插入超链接

    我想以编程方式将 WPF 超链接元素插入 FlowDocument 中 目标是创建一个工具栏按钮 该按钮将获取 RichTextBox 中的一系列文本并将其替换为超链接 它与您在网络上看到的用于在 wiki 或博客 或 StackOverf
  • WPF 列表视图/数据网格内的按钮

    我正在尝试获取单击的行的值 ID 如果选择了该行 则效果很好 但如果我只是尝试单击里面的按钮 则所选客户为空 我如何在这里执行命令参数 我尝试过查看以下问题的答案 ListView 和 ListView 内的按钮 https stackov
  • 如何确定 WPF 中的光标大小?

    在 Windows 窗体中 有一个 Cursor Size 属性 允许您获取光标对象的大小 宽度 高度 如何在 WPF 中确定此信息 SystemParameters 类公开光标宽度 http msdn microsoft com en u
  • 使用 MahApps.Metro 时应用程序图标拉伸至标题栏高度

    使用 MahApps Metro 时如何防止应用程序图标拉伸到标题栏的高度 无论使用什么尺寸的图标 图标和标题栏边缘之间都没有空格 我也尝试过使用多尺寸图标 但这不起作用 这是一个开箱即用的示例 强烈启发自mahapps punker76
  • 无法覆盖由 TargetType 在单个特定控件上设置的全局 WPF 样式

    我有一个应用于所有文本框的样式 在资源字典中定义
  • WPF Prism - 管理应用程序中的模块

    将 Prism 与 WPF 结合使用 我希望允许用户从存储库中选择他们想要使用的模块 每个模块本质上都是一个附加组件 选择要使用的模块只需将其移动到 DLL 的 模块 文件夹中即可加载 但是 在应用程序运行时尝试移动 DLL 时 会引发错误
  • 窗口依赖注入

    我想在 WPF 应用程序中使用 Unity 依赖注入 我的窗口抛出 System Windows Markup XamlParseException 对于 MainWindow 类型 没有找到默认构造函数 这是我的代码 应用程序 xaml
  • 当 Bool 变量变为 True 时更改标签

    我不太确定如何解释这一点 我将把代码放在伪代码中以便于阅读 我几乎想要一个标签在类的 bool 变量更改时更改其文本 我不确定我需要使用什么 因为我使用的是 WPF 并且该类不能只更改我不更改的标签你不觉得吗 我需要举办某种活动吗 或者 W
  • 在 MVC 中重用 WPF ViewModel 是否可行?

    我们有一个用 WPF WCF 编写的富客户端应用程序 并打算在 ASP net 中创建一个配套网站 如果可能 使用 MVC 我被要求弄清楚我们当前的代码库中有多少是可以重用的 由一个单独的团队 而且我对 ASP net 几乎没有经验 我们将
  • 为什么没有人接受 C# 中的公共字段?

    似乎每个 C 静态分析器在看到公共字段时都会抱怨 但为什么 当然 在某些情况下 公共 或内部 field就足够了 拥有一个拥有它的财产是没有意义的get and set 方法 如果我确定我不会重新定义该字段或添加该字段怎么办 副作用很糟糕
  • DependencyProperty 值未通过数据绑定设置

    我有一堂课有一个DependencyProperty member public class SomeClass FrameworkElement public static readonly DependencyProperty Some
  • 在 WPF 中创建复合位图图像

    我有三个位图图像 我想将它们拼接在一起以创建合成图像 要拼接在一起的三个图像按以下方式对齐 这些图像的类型为 System Windows Media Imaging BitmapImage 我看过以下内容solution https st
  • 如何在 wpf 密码框设置一些默认文本? [复制]

    这个问题在这里已经有答案了 可能的重复 WPF 中的水印文本框 https stackoverflow com questions 833943 watermark textbox in wpf 我可以知道如何在 WPF 的密码框中放入一些
  • Spring Boot如何读取jar外部的属性文件

    在我的目标文件夹中 有 2 个文件夹 lib 和 conf 所有的属性文件都放在conf文件夹中 jar放在lib Folder中 在 Spring Boot 之前 我们在 spring xml 中使用以下配置来使用 value
  • 在“id”类型的对象上找不到属性“”

    我越来越Property aVariable not found on object of type id当尝试读取或写入变量到数组时 难道不应该知道我添加的对象是什么类吗 还注意到它可以读取值NSLog anArray objectAtI
  • 主细节视图中的 RenderTargetBitmap GDI 句柄泄漏

    我有一个带有主详细信息视图的应用程序 当您从 主 列表中选择一个项目时 它会使用一些图像 通过 RenderTargetBitmap 创建 填充 详细信息 区域 每次我从列表中选择不同的主项目时 我的应用程序使用的 GDI 句柄数量 如 P
  • 实现自己的“工厂”以重用 WPF 中的视图

    我目前正在使用WAF WPF 应用程序框架 http waf codeplex com discussions 361216用于 WPF 编程 我真的很喜欢为我的应用程序中的每个小视图单元拥有一个自己的 ViewModel 的想法 我随后以
  • 如何消除 Windows 应用商店主页上的恶意“计数器”?

    我有一个简约的主页 4 个按钮和一个 Bing 地图 但是 当我运行该应用程序时 我在左上角和右上角看到两个流氓 计数器 不知道如何描述它们 这是左上角的那个 是什么原因造成的 我怎样才能摆脱它们 顺便说一句 左边的黑色垂直条是 设计的 没
  • 学习 WPF 会提高我的 ASP.NET 技能吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我已经在 Windows 窗体领域工作了很多年 而且仍然如此 我完全不熟悉 ASP NET 技术 也不熟悉其他 Web 相关技术 我曾合作过 O

随机推荐