【问题标题】:Can I add to the functionality of Grid so I can specify new Grid().BindIsVisible( xx );我可以添加到 Grid 的功能,以便我可以指定 new Grid().BindIsVisible( xx );
【发布时间】:2021-03-17 04:28:51
【问题描述】:

这是一个例子:

var grid3Help = 
   new Grid().Bind(Grid.IsVisibleProperty, nameof(HelpIconVisible), source: this)

有什么方法可以添加到 Grid 中,以便我可以将其更改为:

var grid3Help = new Grid().BindIsVisible(HelpIconVisible, source: this)

请注意,如果可能的话,我希望有一个扩展方法,但我不确定如何处理“source: this”的设置

【问题讨论】:

  • 您是否正在寻找一种可以做到这一点的扩展方法?
  • 是的,如果可能的话

标签: c# xamarin xamarin.forms data-binding


【解决方案1】:

如果您可以创建和使用自定义 Grid(具有与 Grid 相同的属性):

public class CustomGrid: Grid
{
    public CustomGrid() : this() { }

    public void BindIsVisible(string bindobj, object sourceobj = null) {
          SetBinding(Grid.IsVisibleProperty, bindobj)
   }
}
var grid3Help = new CustomGrid().BindIsVisible(nameof(HelpIconVisible), source: this)

带扩展方法:

namespace ExtensionMethods
{
    public static class MyExtensions
    {
        public static void BindIsVisible(this Grid grid, string boundproperty)
        {
            grid.SetBinding(VisualElement.IsVisibleProperty, boundproperty);
            return;
        }
    }
}

不要忘记包含命名空间:using ExtensionMethods;

在这两种情况下,您都必须使用nameof() 发送参数,否则您可以尝试一些复杂的Finding the variable name passed to a function

【讨论】:

  • 你知道如何使用扩展方法来做到这一点吗?
  • @Alan2 我不明白你所说的来源是什么意思?还对 Bind() 存在或由您定义感到困惑?我使用了 SetBinding(),但如果需要,您可以更改它以适应您现有的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
  • 1970-01-01
  • 2022-08-04
  • 2022-01-21
相关资源
最近更新 更多