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;
                // }
            }

WPF绑定错误

如果我没有错的话,你使用了DevExpress WPF控件套件中的GridControl(或TreeListControl),并试图对单元格进行模板化。

对于每个单元格,应该显示的数据都被封装在EditGridCellData对象中,并且数据模板被应用于该对象(因此,默认情况下,它是模板内控件的DataContext属性值)。如果列处于绑定模式(即设置了BindingFieldName),则当前行的绑定产生的值由EditGridCellData.Value属性公开。您也可以通过EditGridCellData.RowData.Row路径访问与当前行关联的对象。

话虽如此,并假设oChargeCodesValidvalues是与当前行关联的对象(项)的属性,您应该将绑定更改为:

{Binding DataContext.RowData.Row.oChargeCodesValidvalues, RelativeSource={RelativeSource Mode=Self}}

附带说明一下,如果您没有明确指定绑定的源,那么目标对象的DataContext将自动用作*源,因此您可以将语法缩短为:

{Binding RowData.Row.oChargeCodesValidvalues}

*前提是目标对象是FrameworkElementFrameworkContentElement