You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XAML中通过x:Name将整个对象绑定至另一对象属性?

嘿,我明白你想通过x:Name实现两种可能的需求——要么把目标对象本身绑定到另一个控件的属性,要么把x:Name的字符串值绑定过去。看了你贴的代码,问题出在绑定逻辑上,我分两种情况给你捋清楚:

情况1:把整个对象(比如starOne)绑定到属性上

如果你的starTag属性类型就是StarBehavior,那根本不需要绕弯子设置BindingContext,直接用x:Reference就能直接引用整个对象:

<local:StarBehavior x:Name="starOne" GroupName="myStar"/>
<local:StarImage starTag="{x:Reference starOne}" x:Name="starBlankOne" Source="rating-stars/star_outline.png"/>

这样starBlankOne的starTag就会直接指向starOne这个实例,完美实现“通过x:Name绑定整个对象”的需求。

情况2:把x:Name的字符串值(比如"starOne")绑定到属性上

这里要注意:x:Name是XAML的标记扩展,它只会给继承自FrameworkElement的UI控件自动设置Name属性。如果你的StarBehavior是行为类(比如Xamarin的Behavior或者自定义非UI类),它本身没有Name属性,所以{Binding Name}自然找不到对应的属性,绑定就失效了。

解决这个问题有两种简单方法:

  • 给StarBehavior添加Name可绑定属性:
    先在你的StarBehavior类里加一个Name属性:
    public class StarBehavior : Behavior<VisualElement> // 假设是Xamarin Behavior,根据你的实际基类调整
    {
        public static readonly BindableProperty NameProperty =
            BindableProperty.Create(nameof(Name), typeof(string), typeof(StarBehavior), null);
    
        public string Name
        {
            get => (string)GetValue(NameProperty);
            set => SetValue(NameProperty, value);
        }
    
        // 你原有的其他代码...
    }
    
    然后在XAML里同时设置x:Name和Name(保持两者一致即可):
    <local:StarBehavior x:Name="starOne" Name="starOne" GroupName="myStar"/>
    <local:StarImage BindingContext="{x:Reference starOne}" starTag="{Binding Name}" x:Name="starBlankOne" Source="rating-stars/star_outline.png"/>
    
  • 直接硬编码字符串:
    既然x:Name是你自己写的固定值,也可以直接把字符串赋值给starTag,省去绑定的麻烦:
    <local:StarBehavior x:Name="starOne" GroupName="myStar"/>
    <local:StarImage starTag="starOne" x:Name="starBlankOne" Source="rating-stars/star_outline.png"/>
    

如果是在WPF环境下,只要StarBehavior是FrameworkElement子类,那x:Name会自动同步到Name属性,直接用{Binding Name}就生效,但行为类一般都不是,所以还是得用上面的方法~

内容的提问来源于stack exchange,提问作者Samuel Mungy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:07:50