【发布时间】:2015-07-16 17:43:24
【问题描述】:
标签可绑定属性是否有替代方案? 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: 无法转换为类型 'Xamarin.Forms.BindableObject'
有什么建议吗?
【问题讨论】:
-
您是否尝试过让 TagBehaviour 类从 BindableObject 派生?
标签: data-binding xamarin.forms