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

如何将ComboBox CB1的文本绑定到CB2的ValidationRule并解决绑定报错

错误原因

WPF绑定机制要求绑定目标必须是DependencyObject的依赖属性,而ValidationRule类默认直接继承自Object,不属于DependencyObject子类,你定义的CommunicationMode是普通CLR属性,自然无法直接设置绑定,所以会触发该报错。

可行解决方案(最通用的BindingProxy中转方案)

步骤1:创建绑定代理类

该类继承自Freezable(属于DependencyObject子类,可正常使用绑定),用来中转CB1的文本值:

public class BindingProxy : Freezable
{
    protected override Freezable CreateInstanceCore()
    {
        return new BindingProxy();
    }

    public static readonly DependencyProperty DataProperty = DependencyProperty.Register(
        nameof(Data), typeof(object), typeof(BindingProxy));
    
    public object Data
    {
        get => GetValue(DataProperty);
        set => SetValue(DataProperty, value);
    }
}

步骤2:在XAML资源中声明代理,绑定CB1的Text

在页面/窗口的资源节点中添加代理实例,提前绑定好CB1的文本:

<Window.Resources>
    <!-- 替换xmlns:local为你BindingProxy所在的命名空间 -->
    <local:BindingProxy x:Key="Cb1TextProxy" Data="{Binding ElementName=CB1, Path=Text}" />
</Window.Resources>

步骤3:修改CB2的验证规则赋值

通过静态资源拿到代理中转的CB1文本,赋值给CommunicationMode:

<valid:ComboboxValidationRule CommunicationMode="{Binding Data, Source={StaticResource Cb1TextProxy}}" ValidatesOnTargetUpdated="True"/>

额外注意

你原XAML中两个ComboBox的Text绑定Path="CB1"、Path="CB2"需要确认你的DataContext中存在对应名称的属性,否则这部分绑定也会失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:42:04