在xaml中绑定一个对象

时间:2018-03-20 16:17:02

标签: xaml xamarin xamarin.forms

我试图将整个对象使用它的x:Name绑定到另一个对象的属性。例如

Struct

我如何实现这一目标?

更新:我试图在没有运气的情况下实施这些建议。我正在谈论的xaml如下:

<local:customImage Tag="{Binding x:Name}"/>

也许我应该尝试将starBehaviour移动到c#,因为它不是视觉元素?

P.S我所要做的就是将starTag设置为一个对象,所以如果我能做到这一点而没有绑定,我不介意是否有解决方案。

3 个答案:

答案 0 :(得分:0)

您的视图必须具有包含(公共)属性“名称”

的对象的绑定上下文
<local:customImage Tag="{Binding Name}"/>

编辑:尝试像这样声明你的属性,它接近你所做的,它只是更多类型安全(使用nameof(...)运算符)并且可能包含一些你没有正确写入的警告。

 public static readonly BindableProperty starTagProperty = BindableProperty.Create(propertyName: nameof(starTag),
                                                                                                returnType: typeof(StarBehaviour),
                                                                                                defaultValue: null,
                                                                                                declaringType: typeof(TheClassYouDeclareThisIn),
                                                                                                defaultBindingMode: BindingMode.TwoWay,
                                                                                                propertyChanged: OnStarTagChanged);

        public StarBehaviour starTag
        {
            get { return (StarBehaviour)GetValue(starTagProperty); }
            set { SetValue(starTagProperty, value); }
        }

private static void OnStarTagChanged(BindableObject bindable, object oldValue, object newValue)
        {
            if (bindable is TheClassYouDeclareThisIn starTagDeclarer && newValue is StarBehaviour newStarTag)
            {
//Does this get called if u change up the starTag property? test it
            }
        }

答案 1 :(得分:0)

要绑定对象,只需添加对象的名称即可。 您的财产必须是公共的,即

public ObjectType Name {get;set;}

<local:customImage Tag="{Binding Name}"/>

或者如果你想绑定你当前的绑定上下文,你可以像这样使用它

<local:customImage Tag="{Binding .}"/>

你的财产“标签”也必须是一个可绑定的财产。

答案 2 :(得分:0)

x:Name引用正在使用的组件的名称。 绑定与组件的名称无关,应该是这样的

例如:

<local: customImage x: Name = "NameOfComponent" Tag = "{Binding Name}" />