将 ComboBox 文本绑定到另一个 ComboBox 内的 ValidationRule?

Posted

技术标签:

【中文标题】将 ComboBox 文本绑定到另一个 ComboBox 内的 ValidationRule?【英文标题】:Bind ComboBox Text to a ValidationRule inside another ComboBox? 【发布时间】:2021-11-02 23:15:39 【问题描述】:

我想将 ComboBox CB1 中的文本绑定到 ComboBox CB2 中的验证规则 (CommunicationMode)。 我的源代码看起来像这样,但我收到错误消息:只能为“DependencyObject”的“DependencyProperty”设置“Binding”。 有没有办法解决这个问题?

    public string CommunicationMode  get; set; 
    
    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    
        return new ValidationResult(true, null);
    


<ComboBox Name="CB1">
    <ComboBox.Text>
        <Binding Path="CB1" UpdateSourceTrigger="PropertyChanged"/>
    </ComboBox.Text>
 </ComboBox>

<ComboBox Name="CB2">
    <ComboBox.Text>
        <Binding Path="CB2" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <valid:ComboboxValidationRule CommunicationMode="Binding ElementName=CB1, Path=Name" ValidatesOnTargetUpdated="True"/>
            </Binding.ValidationRules>
        </Binding>
    </ComboBox.Text>
 </ComboBox>

【问题讨论】:

Binding ElementName=CB1, Path=Name,绑定不应该在Text而不是Name吗? 【参考方案1】:

您可以创建一个具有依赖属性的Wrapper 类:

public class ComboboxValidationRule : ValidationRule

    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    
        //your validation logic...
        return new ValidationResult(true, null);
    

    public Wrapper Wrapper  get; set; 


public class Wrapper : DependencyObject

    public static readonly DependencyProperty CommunicationModeProperty =
         DependencyProperty.Register(nameof(CommunicationMode), typeof(string), typeof(Wrapper));

    public string CommunicationMode
    
        get  return (string)GetValue(CommunicationModeProperty); 
        set  SetValue(CommunicationModeProperty, value); 
    

XAML:

<ComboBox Name="CB2">
    <ComboBox.Text>
        <Binding Path="CB2" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <valid:ComboboxValidationRule ValidatesOnTargetUpdated="True">
                    <valid:ComboboxValidationRule.Wrapper>
                        <valid:Wrapper CommunicationMode="Binding Source=x:Reference CB1, Path=Name" />
                    </valid:ComboboxValidationRule.Wrapper>
                </valid:ComboboxValidationRule>
            </Binding.ValidationRules>
        </Binding>
    </ComboBox.Text>
</ComboBox>

【讨论】:

@patrickgc:你试过这个吗?如果您的原始问题已经解决,请记住接受答案。

以上是关于将 ComboBox 文本绑定到另一个 ComboBox 内的 ValidationRule?的主要内容,如果未能解决你的问题,请参考以下文章

vb高手看过来 我一个窗体中十个combobox,分别命名为combo1〜combo10,每个co

MFC 获取Combo Box控件 当前选定项的序号和文本内容

WPF 实现可以多选的 Combo box 有啥好的思路或解决方案

将文本框绑定到 comboBox.SelectedItem 的属性

ComboBox与空项目?

combobox控件使用