Как связать данные коллекции как значение столбцов в сетке данных?

Я хочу связать коллекцию данных как разные столбцы в DataGrid, Обычный способ связывания данных - это свойство связывания. Но теперь мой сценарий - это свойства динамической коллекции, которые могут отличаться от разных экземпляров объекта. Для каждого объекта мне нужно динамически создать DataGrid,

Здесь я приведу упрощенный живой пример, который абстрагирован от моего сценария:

public class Company
{
    ...
    public string CompanyName { set; get; }
    public ObservableCollection<CompanyProperty> data;
}

public class CompanyProperty
{
    public string PropertyName { get; set; }
    public string Value { get; set; }
}

В моем основном классе у меня есть ObservableCollection of Company:

class Window
{
    private ObservableCollection<Company> _list;
    private void CreateData()
    {
        Company tmp = new Company("Siemens");
        tmp.data.Add(new CompanyProperty() { PropertyName = "Country", Value = "Germany" });
        tmp.data.Add(new CompanyProperty() { PropertyName = "Staffs", Value = "400,000" });
        _list.Add(tmp);


        tmp = new Company("ABB");
        tmp.data.Add(new CompanyProperty() { PropertyName = "Country", Value = "Swiss" });
        tmp.data.Add(new CompanyProperty() { PropertyName = "Staffs", Value = "100,000" });
        _list.Add(tmp);
    }
 }

Теперь я хочу связать свои данные с DataGrid который будет выглядеть как 3 столбца (CompanyName, Country, Staffs) и 2 ряда (Siemens, ABB).

Я борюсь с тем, как связать коллекцию свойств компании с различными столбцами в моем DataGrid так как "Country" и "Staffs" - это не свойства класса "Company", а только значения в ObservableCollection член.

1 ответ

Решение

После некоторого исследования я сам нашел решение, которое заключается в создании DataTable для передачи собранных данных в DataTable (мы можем легко изменить значения в разные столбцы в DataTable).

Затем вместо привязки "ObservableCollection _list" мы связываем DataTable с сеткой данных. Это кажется работает.

И мне все еще интересно узнать, есть ли у кого-то какие-то другие или лучшие решения для типа сенарио?

Другие вопросы по тегам