WPF绑定错误
本文关键字:错误 绑定 WPF | 更新日期: 2023-09-27 18:29:44
我是WPF的新手,这个绑定错误让我抓狂。我有一个数据模板,它有combobox。该数据模板由gridview列使用。我正试图将combobox绑定到csla对象,但它将我抛出以下错误:
System.Windows.Data错误:40:BindingExpression路径错误:
在"object"上找不到"oChargeCoodesValidvalues"属性'EditGridCellData'(哈希代码=59067897)'。BindingExpression:Path=DataContext.oChargeCoodesValidvalues;DataItem='ComboBox'(名称='');目标元素是"ComboBox"(名称=");目标属性为"ItemsSource"(类型为"IEnumerable")
这是我的xaml:的片段
<DataTemplate x:Key="combodescriptionTemplate">
<ComboBox Name="cboCodeValidValues" ItemsSource="{Binding DataContext.oChargeCodesValidvalues, RelativeSource={RelativeSource Mode=Self}}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Description}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</DataTemplate>
<local:TotalCellTemplateSelector x:Key="totalcellTemplateSelector"
combodescriptionTemplate="{StaticResource combodescriptionTemplate}"/>
基于评论的更多信息:我在wcf中使用的是devexpress网格视图。有两列都以字段为界。第一个是组合框,第二个是默认的文本框和基于第一列值的组合框。gridview数据源是代码csla对象。ChargeCodeValidValues是cslaobjcet。我使用datatemplate来更改第二列的编辑器。
以下是我的ChargeCodeValidValues对象的代码片段:
public class ChargeCodeValidValues
{
public DataTable ChargeCodesValidValuesTable { get; set; }
public ChargeCodeValidValues()
{
LoadChargeCodesValidValues();
}
public void LoadChargeCodesValidValues()
{
//get data from db
}
调入代码:
private ChargeCodeValidValues oChargeCodesValidvalues;
oChargeCodesValidvalues = new ChargeCodeValidValues();
我正在尝试将combox绑定到oChargeCoodesValidvalues,并得到上面的错误。
以下是我的TotalCellTemplateSelector:的片段
public DataTemplate combodescriptionTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
GridCellData cellData = item as GridCellData;
if (cellData != null)
{
RowData rowdata = cellData.RowData;
DataRowView rowview = rowdata.Row as DataRowView;
if (rowview != null)
{
DataRow drCC = rowview.Row;
//if(drCC.Field<int>("FieldName") != DBNull.Value)
//{
int Code = drCC.Field<int>("FieldName", 0);
if (Code == Value)
return combodescriptionTemplate;
else
return null;
// }
}
如果我没有错的话,你使用了DevExpress WPF控件套件中的GridControl
(或TreeListControl
),并试图对单元格进行模板化。
对于每个单元格,应该显示的数据都被封装在EditGridCellData
对象中,并且数据模板被应用于该对象(因此,默认情况下,它是模板内控件的DataContext
属性值)。如果列处于绑定模式(即设置了Binding
或FieldName
),则当前行的绑定产生的值由EditGridCellData.Value
属性公开。您也可以通过EditGridCellData.RowData.Row
路径访问与当前行关联的对象。
话虽如此,并假设oChargeCodesValidvalues
是与当前行关联的对象(项)的属性,您应该将绑定更改为:
{Binding DataContext.RowData.Row.oChargeCodesValidvalues, RelativeSource={RelativeSource Mode=Self}}
附带说明一下,如果您没有明确指定绑定的源,那么目标对象的DataContext
将自动用作*源,因此您可以将语法缩短为:
{Binding RowData.Row.oChargeCodesValidvalues}
*前提是目标对象是FrameworkElement
或FrameworkContentElement