背景/上下文这个问题: 我有一个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绑定到一个名为compentent的实体框架实体 - 字段name_of_dependant / letternituction / date_of_birth。 不知何故,我决定创建新的属性:ullnames /关系/ datyofbirth - 所有正确的类型。
所以在我的DataGrid中,我绑定到
ObservableCollection<Dependant> 
.

但我的列应该绑定到我的实体表所相关的列。 所以这是正确的:

Binding="{Binding Name_of_Dependant}"
.

这是错误的:

Binding="{Binding FullNames}"
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top