**此问题的背景/上下文:**我有一个WPF桌面应用程序。它使用LINQ to SQL连接到其SQL数据库,并在WPF Datagrid中显示其数据。它运行得相当好,但性能是一个问题,因为LINQ可能非常慢,所以我一直尽可能地将逻辑和UI控件从LINQ数据库上下文中切换出来,而是将它们加载到与LINQ对象非常相似的局部变量中,这大大提高了性能。
**问题:在我测试Datagrid时,当我尝试编辑一个Datagrid的某个(整数)列中的值时,虽然编辑字符串列一直工作正常,但我现在收到了一个新的异常“***双向绑定需要Path或XPath。*”。我不明白为什么会收到这个异常,也不知道该怎么办。
所以当datagrid.datacontext被设置为LINQ实体关联时,它是有效的,但只有当它被设置为普通对象列表时,它才几乎有效。我尝试将列表更改为ObservableCollection,但这没有明显的效果。
我已经在这里和其他网站上看了大约十几个不同的相关问题,没有看到任何似乎有帮助的东西。
目前我有:
<DataGrid Margin="12,110,12,0" x:Name="dgDays" ItemsSource="{Binding}"
Height="165" VerticalAlignment="Top" MinHeight="0"
AutoGenerateColumns="False"
SelectionChanged="dgDays_SelectionChanged">
...
<DataGrid.Columns>
<DataGridComboBoxColumn Width="80" Header="Cook" x:Name="_DailyCookCombo" SelectedItemBinding="{Binding sCook}"/>
<DataGridComboBoxColumn Width="80" Header="Eat" x:Name="_DailyDayCombo" SelectedItemBinding="{Binding sDay}"/>
<DataGridTextColumn Width="52" Header="Prot" Binding="{Binding Protein}" />
<DataGridTextColumn Width="52" Header="Carb" Binding="{Binding Carb}" />
<DataGridTextColumn Width="52" Header="Fat" Binding="{Binding Fat}" />
<DataGridTextColumn Width="62" Header="Prot %" Binding="{Binding ProteinPercent}" />
<DataGridTextColumn Width="62" Header="Carb %" Binding="{Binding CarbPercent}" />
<DataGridTextColumn Width="62" Header="Fat %" Binding="{Binding FatPercent}" />
<DataGridTextColumn Width="116" Header="non PFW meals" Binding="{Binding NonPFWMeals}" />
<DataGridTextColumn Width="55" Header="Prot" Binding="{Binding CalcProt}" IsReadOnly="True" />
<DataGridTextColumn Width="55" Header="Carb" Binding="{Binding CalcCarbs}" IsReadOnly="True" />
<DataGridTextColumn Width="55" Header="Fat" Binding="{Binding CalcFat}" IsReadOnly="True" />
<DataGridTextColumn Width="65" Header="KCal" Binding="{Binding CalcKCal}" IsReadOnly="True" />
<DataGridCheckBoxColumn Width="32" Header="Skip" Binding="{Binding Skip}" />
<DataGridTextColumn Width="70" Header="Date" Binding="{Binding sNextDate}" IsReadOnly="True" />
</DataGrid.Columns>
</DataGrid>
其由代码约束:
dgDays.DataContext = TheMember.RAM_Member_Requirements_Days;
其定义为:
public ObservableCollection<RAM_Member_Requirements_Day> RAM_Member_Requirements_Days = new ObservableCollection<RAM_Member_Requirements_Day>();
其约束成员为:
public class RAM_Member_Requirements_Day : INotifyPropertyChanged
{
// RAM equivalents of DB values:
public System.Nullable<decimal> Protein;
public System.Nullable<decimal> Carb;
public System.Nullable<decimal> Fat;
public System.Nullable<decimal> ProteinPercent;
public System.Nullable<decimal> CarbPercent;
public System.Nullable<decimal> FatPercent;
public System.Nullable<int> NonPFWMeals;
public System.Nullable<bool> Skip;
public System.Nullable<System.DateTime> SkipDate;
我发现了一个非常简单的修复后不久,键入这一点,我会张贴时,网站让我后,其8小时的延迟。
5条答案
按热度按时间ctehm74n1#
我在绑定文本框时遇到了这个问题。我的解决方案是显式绑定到“”:
这招奏效了。
ar7v8xwq2#
“双向绑定需要路径或XPath”错误可能是由于XAML中的路径名与c# Binding元素中的路径名有一点不同。大写字母真的很重要!这就是我的问题。
XAML:
C编号:
这将导致需要路径或XPath错误的双向绑定,因为它们并不完全相同,程序无法找到绑定路径!
也许这能帮助那些犯了同样错误的人
byqmnocz3#
好吧,好吧,打完这些之后,我试了一些有效的方法。无论如何,我还是要发帖,以防对别人有帮助。
解决方案是向问题成员添加绑定的变量:
例如:
rseugnpd4#
当你在一天结束的时候感到疲倦的时候,你有时会做一些奇怪的小事情。我有一个绑定到一个叫做Dependant的实体框架实体的Datagrid- fields Name_of_Dependant / Relationship / Date_of_Birth。不知何故,我决定创建新的属性:全名/关系/出生日期-所有正确的类型。
所以在我的数据网格中我绑定到一个
但是我的列应该绑定到我的实体表Dependant中的列,所以这是正确的:
这是错误的:
sf6xfgos5#
这个错误出现的另一种方式(在我看来是错误的):我有一个DataGrid,其中ItemsSource行对象包含一个类对象X。
绑定路径类似于Binding="{Binding MyClassInstance.PropA}”
此外,网格设置为允许用户添加行。在添加行时,我忘记安排初始化MyClassInstance,因此它为空。当我从新行中删除焦点时,我将获得双向绑定需要Path或XPath异常。
当我试图修复其中一个方法时,我发现了真实的的原因,这导致我得到了空值异常。
绑定的堆栈跟踪需要一个路径错误是相当广泛的,这告诉我,开发人员一旦深入到调用,猜测最可能的原因为null值的路径问题.个人而言,对我来说,它会更有用的异常消息说:“null值遇到,检查路径或xpath已指定.”