如何修复WPF DataGrid中的“双向绑定需要路径或XPath”异常?
-
13-11-2019 - |
题
背景/上下文这个问题: 我有一个wpf桌面应用程序。它使用LINQ到SQL来连接到其SQL数据库,并在WPF DataGrid中显示其数据。它的工作很好,但表现是一个问题,因为Linq可能是致命的缓慢,所以我已经尽可能地切换了我的逻辑和ui控件远离LINQ数据库上下文,而是将它们加载到非常相似的局部变量中大规模提高性能的LINQ对象。
问题: 当我测试我的DataGrids时,我现在得到一个新的例外“ 双向绑定需要路径或xpath。 ”当我尝试编辑某个(整数)时(整数)一个DataGrid的列,但编辑字符串列一直在正常工作。我不明白为什么我要这样做,或者要做什么。
所以它在dataGrid.dataContext被设置为LINQ实体关联时,但它只在设置为纯对象列表时几乎工作。我尝试将列表更改为观察,但这没有明显的效果。
我在这里和其他网站上看过大约不同的相关问题,并没有看到任何似乎有帮助的东西。
目前我有:
.
<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小时延迟之后发布时,我将发布。
解决方案 3
解决方案是添加到绑定的问题成员变量:
{get;放;}
如:
public System.Nullable<decimal> Protein { get; set; }
public System.Nullable<decimal> Carb { get; set; }
public System.Nullable<decimal> Fat { get; set; }
public System.Nullable<decimal> ProteinPercent { get; set; }
public System.Nullable<decimal> CarbPercent { get; set; }
public System.Nullable<decimal> FatPercent { get; set; }
public System.Nullable<int> NonPFWMeals { get; set; }
public System.Nullable<bool> Skip { get; set; }
. 其他提示
我用绑定的文本框遇到了这个问题。我的解决方案是明确地绑定到“。”:
<TextBox Text="{Binding Path=.}" />
.
这是诀窍。
“双向绑定需要路径或XPath”故障可能会导致XAML中的路径的名称略有区别,而C#绑定元素中的路径vs。首都字母非常重要!那是我的问题。
xaml:
<DataGridTextColumn Binding="{Binding Path=TotalHeure}" ClipboardContentBinding="{x:Null}" Header="Total Heures" Width="80"/>
.
c#:
public string Totalheure { get; set; }
.
这将导致双向绑定需要路径或XPath错误,因为它们不完全相同,程序无法找到绑定路径!
也许它会帮助别人犯有同样的错误
所以在我的DataGrid中,我绑定到
ObservableCollection<Dependant>
.
但我的列应该绑定到我的实体表所相关的列。 所以这是正确的:
Binding="{Binding Name_of_Dependant}"
.
这是错误的:
Binding="{Binding FullNames}"
.