Проблема с привязкой WPF DataGrid к DataView с недопустимыми именами столбцов в качестве пути свойства - PullRequest
0 голосов
/ 01 июня 2018

Учитывая следующий код:

<Window x:Class="DataViewBindingTrouble.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="450" Width="800" x:Name="Win">
    <DataGrid ItemsSource="{Binding ElementName=Win, Path=TestData}" 
AutoGenerateColumns="True" IsReadOnly="True" 
AutoGeneratingColumn="DataGrid_OnAutoGeneratingColumn" />
</Window>

код позади:

using System.Data;
using System.Windows.Controls;

namespace DataViewBindingTrouble
{
public partial class MainWindow
{
    public MainWindow()
    {
        InitializeComponent();
    }

    public DataView TestData
    {
        get
        {
            var dt = new DataTable();
            var newRow = dt.NewRow();
            var newCol = dt.Columns.Add();
            //newCol.ColumnName = "uniqueColName";
            var troublemaker = "This is not a [valid] property path and causes.trouble]";
            //newCol.Caption = troublemaker;
            newCol.ColumnName = troublemaker;
            newRow[newCol] = "Foobar";
            dt.Rows.Add(newRow);
            return dt.DefaultView;
        }
    }

    private void DataGrid_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
    {
       // e.Column.Header = TestData.Table.Columns.OfType<DataColumn>()
       //     .Single(someCol => someCol.ColumnName == e.PropertyName).Caption;
    }
}
}

Автогенератор для столбцов создает привязку с недопустимым путем свойства, поскольку специальные символы содержатся в столбцеимя не экранированоЯ могу обойти это без особых проблем, используя закомментированный код (читай: добавьте безвредные имена столбцов и сохраните заголовок отдельно), но если у меня нет контроля над моим источником данных, как можно это сделать?Я думал об использовании PropertyDescriptor вместо простого пути к свойству, но не смог найти простой способ получения PropertyDescriptors для столбцов DataTable без написания пользовательской оболочки.

Есть ли какие-то очевидные опции, которые я пропустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...