【问题标题】:Xamarin Forms Grid conditional RowSpanXamarin Forms Grid 条件 RowSpan
【发布时间】:2018-11-21 01:37:03
【问题描述】:

我有一个通用的网格列表控件。这让我绑定了项目源和项目模板,它将根据项目数或用户设置行和列的方式生成列和行。它完美到这里。它支持我需要的所有泛型。

现在问题部分: 我有一个 ContentView 将用作网格的项目模板。此模板将用于多种数据类型。我能够正确地做到这一点。现在我有一个数据类型,如果第一个单元格满足特定条件,它应该有 RowSpan:下面的代码完美。它完美地创建了 RowSpan。

    bool isYearBuilt = false;
    bool isAny = false;

    public FilterItemView()
    {
        InitializeComponent();
    }

    protected override void OnBindingContextChanged()
    {
        base.OnBindingContextChanged();

        var context = BindingContext as PropertyFilterItem;
        if (context == null)
            return;

        if(context.FilterType==PropertyFilterTypes.YearBuilt)
        {
            if(context.IsAny)
            {
                isYearBuilt = true; isAny = true;   
            }
        }
    }


    protected override void OnParentSet()
    {
        base.OnParentSet();
        GridList grid = this.Parent as GridList;
        if (grid == null)
            return;

        if(isYearBuilt && isAny)
        {
            Grid.SetRowSpan(this, 2);
        }
    }

这些是图像;这将更完美地描述它: 这是基于上述代码的外观。我们可以看到它正在创建 RowSpan。

这是我期望做的。

唯一的问题是 - 在设置 RowSpan 时,它不会刷新后续单元格。因为,我在创建网格和所有单元格之后在运行时应用 RowSpan。如何刷新 Grid 和其他剩余单元格以移动到自己的单元格?

谢谢你帮助我。

【问题讨论】:

    标签: xamarin.forms


    【解决方案1】:

    设置网格列表的ItemsSource = null 并再次将其设置回您想要的项目源。

    【讨论】:

    • 我只能在Page中访问ItemSource。上面的代码在 ItemTemplate 中。只能访问绑定到当前视图的项目。
    【解决方案2】:

    问题原因:

    正如您所说,在设置 RowSpan 时,它不会刷新后续单元格。

    解决方案:

    使用Grid.SetRowSpan(this, 2); 设置行跨度后,您必须再次绑定数据源。

    【讨论】:

    • 我只能在Page中访问ItemSource。上面的代码在 ItemTemplate 中。只能访问绑定到当前视图的项目。
    【解决方案3】:

    因为我有自己的自定义网格列表控件。我实现了更多属性,这些属性让我知道何时必须为网格中的子视图设置行跨度并调整后续子项。这是处理此问题而不是重新分配 ItemSource 属性的唯一最佳方法。因为,如果我们分配项目源,它将重绘所有项目(包括行和列 - 而不是行/列跨度)。所以我们仍然会遇到同样的问题。

    解决方案:在我的网格控件中添加了 RowSpan 逻辑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      • 2020-08-11
      • 2014-07-25
      相关资源
      最近更新 更多