将 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 有啥好的思路或解决方案