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

为何转换器接收的是Microsoft.Maui.Controls.Binding而非实际值?

为何转换器接收的是Microsoft.Maui.Controls.Binding而非实际值?

兄弟,我一眼就瞅出你代码里的问题啦——你的MultiBinding绑定写法搞错了,这才导致转换器拿到的不是实际属性值,而是Binding对象本身!

咱来拆解下问题所在:

  • 第一个Binding的写法完全错了:你写的 <Binding Source="{Binding Route}" />,这里的Source是用来指定绑定的数据源的,结果你给它赋值了{Binding Route},这相当于把数据源直接设成了一个Binding实例,而不是Route属性的实际值。正确的做法是直接绑定当前ShellSection的Route属性,写成 <Binding Path="Route" /> 就行(如果是当前上下文的属性,甚至可以简化成 <Binding Route />)。

  • 第二个Binding缺了关键的属性路径:你写的 <Binding Source="{x:Reference thisShell}" /> 只指定了数据源是根Shell实例,但没说要拿它的哪个属性!所以它直接把thisShell这个对象传给了转换器,而不是你需要用来对比的那个属性(比如当前Shell的路由属性)。你得加上Path,比如 <Binding Source="{x:Reference thisShell}" Path="CurrentRoute" />,这样转换器才能拿到对应的字符串值。

给你改好的代码示例:

<Label>
    <Label.Text>
        <MultiBinding Converter="{converters:StringCompareConverter}">
            <!-- 绑定当前ShellSection的Route属性 -->
            <Binding Path="Route" />
            <!-- 绑定根Shell的CurrentRoute属性,用来做对比 -->
            <Binding Source="{x:Reference thisShell}" Path="CurrentRoute" />
        </MultiBinding>
    </Label.Text>
</Label>

这么改完之后,你的转换器Convert方法里的values数组,就会拿到两个实际的字符串值了——第一个是当前ShellSection的Route,第二个是根Shell的当前路由,你直接在转换器里对比这俩值返回true或false就搞定啦!

备注:内容来源于stack exchange,提问作者Toto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 10:38:02