Двусторонняя привязка между DataGrid и массивом



У меня есть массив с именем:



string[,] TableData;


Могу ли я связать его содержимое с элементом управления DataGrid с помощью привязки?



Если это возможно, я хотел бы, чтобы пользователь мог редактировать сетку и отражать изменения в массиве.

669   3  

3 ответов:

См. этот вопрос: Как заполнить сетку WPF на основе 2-мерного массива

Вы можете использовать этот элемент управления называется DataGrid2D (исходный код здесь ). Чтобы использовать его, просто добавьте ссылку на DataGrid2DLibrary.dll, добавьте это пространство имен

xmlns:dg2d="clr-namespace:DataGrid2DLibrary;assembly=DataGrid2DLibrary"

А затем создайте DataGrid2D и свяжите его с вашим IList, 2D-массивом или 1D-массивом, как это

<dg2d:DataGrid2D Name="dataGrid2D"
                 ItemsSource2D="{Binding Int2DList}"/>

Пользователи смогут редактировать данные, а изменения, внесенные в DataGrid, будут отражены в 2D массиве

Вы не можете привязать матрицу к DataGrid. Однако, в зависимости от того, чего вы пытаетесь достичь, вы можете преобразовать его в массив class.

Каково содержание вашей матрицы? Почему бы тебе не попробовать что-нибудь подобное?

public class MyClass
{
    public string A { get; set; }
    public string B { get; set; }

    public MyClass(string a, string b)
    {
        Debug.Assert(a != null);
        Debug.Assert(b != null);

        this.A = a;
        this.B = b;
    }
}

Затем создайте экземпляр следующего вида:

MyClass[] source = { new MyClass("A", "B"), new MyClass("C", "D") };
this.dataGrid.ItemsSource = source;

В качестве альтернативы, если вы не можете изменить тип вашего источника, попробуйте использовать LINQ для его проецирования:

var source = (from i in Enumerable.Range(0, matrix.GetLength(0))
              select new MyClass(matrix[i, 0], matrix[i, 1])).ToList();
this.dataGrid1.ItemsSource = source;

Самый простой способ-использовать сборку в WPF Datagrid и спроецировать массив в класс представления, который будет привязан.

Вы хотите, чтобы ваши пользователи могли добавлять строки? Если да, то привязка к массиву невозможна, так как вы не можете добавлять строки.

Если у вас есть любое количество столбцов, вы должны иметь возможность спроецировать свой массив в динамический объект и установить свойство AutoGenerateColumns datagrid в true. У ваших колонок есть названия?

Comments

    Ничего не найдено.