XamarinForms模板绑定等价物

本文关键字:等价物 绑定 XamarinForms | 更新日期: 2023-09-27 18:26:58

我正试图在XamarinForms PCL项目中创建一个通用的自定义控件,该控件相当于Windows 8/RT中的UserControl。

这是我迄今为止所拥有的。

首先,我在继承自ContentView:的控件中创建了可绑定属性

public static readonly BindableProperty TitleProperty =
        BindableProperty.Create<MyCustomControl, string> (
            p => p.Title, defaultValue: "NO TITLE", defaultBindingMode: BindingMode.TwoWay,
            validateValue: null,
            propertyChanged: (bindableObject, oldValue, newValue) =>
            {
                if (bindableObject != null)
                {
                }
                Logger.Instance.WriteLine ("TITLE PROPERTY CHANGED: OldValue = " + oldValue + " , NewValue = " + newValue);
            });
    public string Title { get { return (string)GetValue (TitleProperty); } set { SetValue (TitleProperty, value); } }

然后我想在XAML中的标签中使用它,如下所示:

<Label Text="{TemplateBinding Title}" />

但是,TemplateBinding MarkupExtension不存在,所以我得到了一个XamlParseException。

我已经可以想出一个变通方法,用x:Name="MyLabel"命名标签,并用newValue更改propertyChanged委托中的Text值,但有更好的方法吗?

我不需要这个控件的自定义渲染器,如果可能的话,我想在XAML中完成这一切。提前感谢!

更新:Pete回答了。只需使用{Binding}并正确设置BindingContext即可。

以下是我如何让它发挥作用的。

            var pageContent = new CustomControl ();
        pageContent.SetBinding (CustomControl.TitleProperty, new Binding(path: "Title"));
        pageContent.BindingContext = new {Title = "This is the title that's databound!"};

不过,BindableProperty中的默认值看起来不起作用。。

XamarinForms模板绑定等价物

我不确定这是否有帮助?

<Label Text="{Binding Title}"/>

还记得设置BindingContext吗?