Datagrid列标题和值绑定

时间:2013-12-11 08:28:21

标签: c# xaml mvvm datagrid

我遇到了将列标题和值绑定到MVVM PRISM中的数据网格的问题。

我正在使用SearchResult类,它有两个属性:

  • ColumnNames --->这些将适用于标题
  • ColumnValues --->这些将作为其值应用于特定标头。

    公共类SearchResult {     public List ColumnNames;

    public List<object> ColumnValues;
    
    public string ColumnName { get; set; }
    public object ColumnValue { get; set; }
    
    public SearchResult()
    {
        this.ColumnNames = new List<string>();
        this.ColumnValues = new List<object>();
    }
    
    public void AddColumnAttributes(string columnName, object columnValue)
    {
        this.ColumnNames.Add(columnName);
        this.ColumnValues.Add(columnValue);
        this.ColumnName = columnName;
        this.ColumnValue = columnValue;
    }
    

    }

这些属性是通过C#代码动态填充的列表。

我需要将它们绑定到XAML中的列标题和列值。

我已经创建了ObservableCollection结果,它是我的gridview的源,但仍然没有绑定标题和值。

public ObservableCollection<SearchResult> Result
    {
        get { return this.searchResult; }
        set 
        { 
            this.searchResult = value;
            this.NotifyPropertyChanged("SearchResult");
        }
    }

和XAML:

<DataGrid ItemsSource="{Binding SearchResult}" Width="350">
            <DataGrid.Columns>
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.Header>
                        <TextBlock Text="{Binding ColumnName, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"></TextBlock>
                    </DataGridTemplateColumn.Header>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>

我会感激任何帮助!

1 个答案:

答案 0 :(得分:0)

我厚的你的代码应该是这样的..

<DataGrid ItemsSource="{Binding SearchResult, ElementName=PageTitle}" Width="350">
        <DataGrid.Columns>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.Header>
                    <TextBlock Text="{Binding ColumnNames/ColumnName, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"></TextBlock>
                </DataGridTemplateColumn.Header>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
</DataGrid>