WPF绑定错误

时间:2016-01-08 23:21:18

标签: c# wpf xaml combobox

我是WPF的新手,这个绑定错误让我发疯。 我有一个具有组合框的datatemplate。该datatemplate由gridview列使用。我试图将组合框绑定到csla对象,但它让我失误:

  

System.Windows.Data错误:40:BindingExpression路径错误:
  ' oChargeCodesValidvalues'在' object'上找不到的属性   '' EditGridCellData' (的HashCode = 59067897)&#39 ;.   BindingExpression:路径= DataContext.oChargeCodesValidvalues;   的DataItem ='组合框' (名称='&#39);目标元素是' ComboBox' (名称='&#39);   目标属性是' 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。有两列都是有界的。首先是组合框,第二个是默认的文本框和基于第一列的值的组合.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绑定到oChargeCodesValidvalues并超出错误。

以下是我的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;
                // }
            }

1 个答案:

答案 0 :(得分:1)

如果我没弄错,你使用DevExpress WPF控制套件中的GridControl(或TreeListControl)并试图模拟一个单元格。

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

说完并假设oChargeCodesValidvalues是与当前行关联的对象(item)的属性,您应该将绑定更改为:

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

作为旁注,如果您没有明确指定绑定的源,则目标对象的DataContext将自动用作源,因此您可以将语法缩短为:

{Binding RowData.Row.oChargeCodesValidvalues}

*如果目标对象是 FrameworkElement FrameworkContentElement