首页 > 解决方案 > Xamarin Forms - 创建具有复杂数据绑定的自定义条目列 sfdatagrid

问题描述

我目前正在从事一个项目,我试图以编程方式生成同步融合数据网格列并为每一列分配一个自定义模板,这只是一个可以编辑的输入字段。我已经能够创建所有字段。每个都没有附加到主要网络我还需要将初始值绑定到它,我已经尝试使用简单的标签并且它似乎有效。但是,当我尝试运行它时,我得到了错误:

绑定:在“APPNAME.ViewModel”上找不到“距离”属性,目标属性:“Syncfusion.SfDataGrid.XForms.Renderers.SfEntry.Text。

它仍然显示单元格,但没有正确显示。

内容页:

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(十进制)

正如我所说,该解决方案适用于标签,但我不明白为什么它没有正确绑定到条目。(我怀疑这可能与 Sf.Entry.TextProperty 与 SfEntry 不同有关。

如果您需要更多信息,请询问:) 提前感谢您的所有帮助。

标签: c#xamarin.formssyncfusion

解决方案


由于您已将绑定初始化为视图模型类以用于单元格模板中的条目,这不是正确的方法。因此,删除条目的绑定以实现您的要求。有关更多详细信息,请参阅代码片段和附加示例。

代码片段:

GridTemplateColumn templateColumn = new GridTemplateColumn () { HeaderText = $"Distances{0}", MappingName = "Distances[0].Dist", Width = 50, }; var dataTemplate = new DataTemplate(() => { var entry = new SfEntry() { Horizo​​ntalTextAlignment = Xamarin.Forms.TextAlignment.Center, VerticalTextAlignment = Xamarin.Forms.TextAlignment.Center, }; entry.SetBinding(SfEntry.TextProperty, "距离[0].Dist"); 返回条目; }); templateColumn.CellTemplate = 数据模板;this.dataGrid.Columns.Add(templateColumn);

示例链接:https ://www.syncfusion.com/downloads/support/directtrac/general/ze/DataGridSample13733504452029276592.zip

问候, Karthik Raja


推荐阅读