将标记创建为可绑定属性

时间:2015-07-16 17:43:24

标签: data-binding xamarin.forms

Tag Bindable Property有替代品吗? WPF中提供了标记属性。但是,它在Xamarin.Forms中不存在。

我想在两个元素之间创建一个可绑定的上下文。  具体来说,我想将标签的Tag属性绑定到条目的Text属性。

我尝试过以下方法:

标记属性

public class TagBehavior
{
    public static readonly BindableProperty TagProperty = BindableProperty.CreateAttached<TagBehavior, BindableObject>(
           bindableObject => TagBehavior.GetTag(bindableObject),
           null, /* default value */
           BindingMode.OneWay,
           null,
           (bo, old, @new) => TagBehavior.OnCompletedChanged(bo, old, @new),
           null,
           null);

    public static BindableObject GetTag(BindableObject bindableObject)
    {
        return (BindableObject)bindableObject.GetValue(TagBehavior.TagProperty);
    }

    public static void SetTag(BindableObject bindingObject, BindableObject value)
    {
        bindingObject.SetValue(TagBehavior.TagProperty, value);
    }

    public static void OnCompletedChanged(BindableObject bindableObject, BindableObject oldValue, BindableObject newValue)
    {
        //var tag = TagBehavior.GetTag(entry);

        //if (tag != null)
        //{
        //    Debug.WriteLine("TODO - Handle tag's value change event");
        //}
    }
}

XAML

xmlns:Behaviors="clr-namespace:ViewMenu.Behaviors;assembly=ViewMenu"

。 。

<Entry x:Name="textBox1" BindingContext="{StaticResource ViewModel}" Text="{Binding Path=Content1}" Grid.Row="0" Grid.Column="0" >
  <Entry.Behaviors>
    <Behaviors:TextBoxFocusBehavior />
  </Entry.Behaviors>
</Entry>

<Label x:Name="label1" Grid.Row="0" Grid.Column="0" 
       Behaviors:TagBehavior.Tag="{Binding Source={x:Reference textBox1}, Path=Text}">
  <Label.Behaviors>
    <Behaviors:LabelDisplayBehavior />
  </Label.Behaviors>
</Label>

但是,我在输出窗口中收到错误消息:

  

SetValue:无法转换为类型   &#39; Xamarin.Forms.BindableObject&#39;

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您正在创建类型为getWindowConfigurer().getActionBarConfigurer().getCoolBarManager(); 的附加属性,您尝试将其绑定到类型为BindableObject的{​​{1}}的属性Text。显然,TextBox无法转换为string因此错误。

相反,声明类型为string的附加属性,或者如果您希望保持更为通用,属于BindableObject类型:

string