Dro*_*onz 13 data-binding wpf wpfdatagrid 2-way-object-databinding
这个问题的背景/上下文: 我有一个WPF桌面应用程序.它使用LINQ to SQL连接到其SQL数据库,并在WPF Datagrids中显示其数据.它的工作还算不错,但性能是一个问题,因为LINQ可能是致命的慢,所以我一直在交换我的逻辑和UI控制从LINQ数据库环境远尽可能,而是它们加载到本地变量,这是非常相似LINQ对象,大大提高了性能.
问题: 当我测试我的Datagrids时,我现在得到一个新的异常" 双向绑定需要Path或XPath. "当我尝试编辑一个Datagrid的某个(整数)列中的值时,尽管编辑字符串列已经工作得很好.我不明白为什么我会这样做,或者该怎么做.
因此,当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">
Run Code Online (Sandbox Code Playgroud)
...
<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>
Run Code Online (Sandbox Code Playgroud)
这是由代码绑定:
dgDays.DataContext = TheMember.RAM_Member_Requirements_Days;
Run Code Online (Sandbox Code Playgroud)
其定义为:
public ObservableCollection<RAM_Member_Requirements_Day> RAM_Member_Requirements_Days = new ObservableCollection<RAM_Member_Requirements_Day>();
Run Code Online (Sandbox Code Playgroud)
其约束成员是:
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;
Run Code Online (Sandbox Code Playgroud)
我在键入此内容后不久发现了一个非常简单的修复程序,当网站在8小时延迟后让我发布时,我会发布该修复程序.
Lyn*_*ing 18
我遇到了绑定文本框的问题.我的解决方案是明确绑定到".":
<TextBox Text="{Binding Path=.}" />
Run Code Online (Sandbox Code Playgroud)
这就是诀窍.
“双向绑定需要路径或XPath”错误可能是由于XAML中的路径名与c#Binding元素中的路径名略有不同引起的。大写字母真的很重要!那是我的问题。
XAML:
<DataGridTextColumn Binding="{Binding Path=TotalHeure}" ClipboardContentBinding="{x:Null}" Header="Total Heures" Width="80"/>
Run Code Online (Sandbox Code Playgroud)
C#:
public string Totalheure { get; set; }
Run Code Online (Sandbox Code Playgroud)
这将导致双向绑定,要求Path或XPath错误,因为它们并不完全相同,并且程序无法找到绑定路径!
也许它将帮助犯同样错误的其他人
好吧,输入所有内容后,我尝试了一些有效的方法。无论如何我都会发帖,以防对其他人有帮助。
解决方案是在问题中添加绑定的成员变量:
{ get; set; }
Run Code Online (Sandbox Code Playgroud)
如:
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; }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
23856 次 |
最近记录: |