Xamarin Forms - создание настраиваемого столбца ввода sfdatagrid со сложной привязкой данных

В настоящее время я работаю над проектом, в котором я пытаюсь программно сгенерировать столбцы таблицы данных syncfusion и назначить каждому столбцу настраиваемый шаблон, который представляет собой просто поле ввода, которое можно редактировать. Я смог создать все поля. Каждый из них не был привязан к крупной новой версии, мне также нужно привязать к нему начальное значение, что я пробовал с простыми метками, и, похоже, это сработало. Однако, когда я пытаюсь запустить это, я получаю сообщение об ошибке:

Привязка: свойство Distances не найдено в APPNAME.ViewModel, целевое свойство: Syncfusion.SfDataGrid.XForms.Renderers.SfEntry.Text.

Он по-прежнему отображает ячейки, но не в правильном представлении.

ContentPage:

public MainPage()
        {
            InitializeComponent();

            dataGridView.FrozenColumnsCount = 1;
            dataGridView.ItemsSource = viewModel.Objects;
            dataGridView.BindingContext = viewModel.Objects;

            for (int i = 0; i < numberOfDatapoints; i++)
            {
                var newColumn = new GridTemplateColumn()
                {
                    HeaderText = $"Distance {i + 1}",
                    MappingName = $"Distances[{i}].Distance",
                    Width = 100
                };

                Xamarin.Forms.DataTemplate templateColumn = new Xamarin.Forms.DataTemplate(() =>
                {
                    var entry = new SfEntry()
                    {
                        HorizontalTextAlignment = Xamarin.Forms.TextAlignment.Center,
                        VerticalTextAlignment = Xamarin.Forms.TextAlignment.Center,
                        BindingContext = viewModel
                    };
                    entry.SetBinding(SfEntry.TextProperty, $"Distances[{i}].Distance");
                    return entry;
                });

                newColumn.CellTemplate = templateColumn;

                dataGridView.Columns.Add(newColumn);
            }
        }

Viewmodel просто содержит наблюдаемую коллекцию BindingObjectTest, которая затем заполняется.

Итак, структура данных следующая: модель просмотра -> Объекты (ObsLst [BindObjTst]) -> Расстояния (ObsLst [ObservableDistances]) -> Расстояние (десятичное)

Как я уже сказал, решение работает с метками, но я не понимаю, почему оно не привязано должным образом к записи. (Я подозреваю, что это может быть связано с тем, что Sf.Entry.TextProperty отличается от SfEntry.

Если вам нужна дополнительная информация, просто спросите :) Заранее спасибо за вашу помощь.


person Minirobbo    schedule 19.06.2020    source источник


Ответы (1)


Поскольку вы инициализировали привязку как класс модели просмотра для записи в шаблоне ячейки, и это неправильный способ. Итак, удалите привязку к записи, чтобы выполнить ваше требование. Для получения дополнительных сведений см. Фрагмент кода и прилагаемый образец.

Фрагмент кода:

GridTemplateColumn templateColumn = new GridTemplateColumn () {HeaderText = $ Distances {0}, MappingName = Distances [0] .Dist, Width = 50,}; var dataTemplate = new DataTemplate (() = ›{var entry = new SfEntry () {HorizontalTextAlignment = Xamarin.Forms.TextAlignment.Center, VerticalTextAlignment = Xamarin.Forms.TextAlignment.Center,}; entry.SetBinding (SfEntry. [0] .Dist); вернуть запись;}); templateColumn.CellTemplate = dataTemplate; this.dataGrid.Columns.Add (templateColumn);

Пример ссылки: https://www.syncfusion.com/downloads/support/directtrac/general/ze/DataGridSample13733504452029276592.zip

С уважением, Картик Раджа

person Karthik Rj    schedule 30.06.2020