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;
有什么建议吗?
答案 0 :(得分:0)
您正在创建类型为getWindowConfigurer().getActionBarConfigurer().getCoolBarManager();
的附加属性,您尝试将其绑定到类型为BindableObject
的{{1}}的属性Text
。显然,TextBox
无法转换为string
因此错误。
相反,声明类型为string
的附加属性,或者如果您希望保持更为通用,属于BindableObject
类型:
string