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

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

Binding: свойство 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);
            }
        }

Модель просмотра просто содержит наблюдаемую коллекцию "BindingObjectTest", который затем заполняется.

Итак, структура данных следующая: viewmodel -> Objects (ObsLst [BindObjTst]) -> Distances (ObsLst [ObservableDistances]) -> Distance (decimal)

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

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

1 Ответ

0 голосов
/ 30 июня 2020

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

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

GridTemplateColumn templateColumn = new GridTemplateColumn () {HeaderText = $ "Distances {0}", MappingName = "Distances [ 0] .Dist ", Ширина = 50,}; var dataTemplate = new DataTemplate (() => {var entry = new SfEntry () {HorizontalTextAlignment = Xamarin.Forms.TextAlignment.Center, VerticalTextAlignment = Xamarin.Forms.TextAlignment.Center,}; entry.SetBinding (SfEntry. Distances [0] .Dist "); return entry;}); templateColumn.CellTemplate = dataTemplate; this.dataGrid.Columns.Add (templateColumn);

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

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

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