WPF在有效性规则绑定属性

编程入门 行业动态 更新时间:2024-10-21 09:46:15
本文介绍了WPF在有效性规则绑定属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我遇到了两个文本框形式:

    
  • TotalLoginsTextBox

  •   
  • UploadsLoginsTextBox

  •   

    我想限制UploadsLoginsTextBox这样的文本的最大输入将是TotalLoginsTextBox的值。我还使用值转换器,所以我尝试绑定的最大值:

    这是XAML:

    <! - 合计登录 - ><标签保证金=5个总:LT; /标签><文本框名称=TotalLoginsTextBox了minWidth =30文本={绑定路径= MAXLOGINS,模式=双向}/><! - 上传 - ><标签保证金=5>上传:LT; /标签>&所述;文本框名称=UploadsLoginsTextBox了minWidth =30>    < TextBox.Text>        <绑定路径=MAXUP模式=双向NotifyOnValidationError =真>            < Binding.ValidationRules>                <校验:MinMaxRangeValidatorRule最小=0最大={绑定路径= MAXLOGINS}/>            < /Binding.ValidationRules>        < /装订>    < /TextBox.Text>< /文本框>

    问题我收到以下错误:

      

    一个绑定不能在类型的'最大'属性设置  MinMaxRangeValidatorRule。 A'绑定'只能在一组  的DependencyProperty DependencyObject的。

    什么是做绑定的正确方法?

    解决方案

    您会看到这个错误的原因的 MinMaxRangeValidatorRule.Maximum 的需要是一个的DependencyProperty,如果你想将其绑定到的 MAXLOGINS 的,虽然它可能是一个简单的CLR属性。

    真正的问题是,MinMaxRangeValidatorRule应该能够从有效性规则和自DependencyObject(使依赖属性可用)继承。这是不可能的在C#

    我解决这样一个类似的问题:

  • 提供一个名称的验证规则

    <校验:MinMaxRangeValidatorRule NAME =MinMaxValidator最小=0/>

  • 在code的背后,设置最大值时MAXLOGINS变化

    公众诠释MAXLOGINS{    {返回(INT)的GetValue(MaxLoginsProperty); }    集合{的SetValue(MaxLoginsProperty,值); }}公共静态的DependencyProperty MaxLoginsProperty = DependencyProperty.Register(MAXLOGINS                                                                                    typeof运算(INT)                                                                                    typeof运算(mycontrol)                                                                                    新PropertyMetadata(HandleMaxLoginsChanged));私有静态无效HandleMinValueChanged(DependencyObject的D,DependencyPropertyChangedEventArgs E){    mycontrol源=(mycontrol)D;    source.MinMaxValidator.Maximum =(INT)e.NewValue;}

  • i'm having a form with 2 text boxes:

  • TotalLoginsTextBox

  • UploadsLoginsTextBox

  • i want to limit UploadsLoginsTextBox so the maximum input for the text will be the value of the TotalLoginsTextBox. i am also using a value converter so i try to bound the Maximum value:

    this is the XAML:

    <!-- Total Logins --> <Label Margin="5">Total:</Label> <TextBox Name="TotalLoginsTextBox" MinWidth="30" Text="{Binding Path=MaxLogins, Mode=TwoWay}" /> <!-- Uploads --> <Label Margin="5">Uploads:</Label> <TextBox Name="UploadsLoginsTextBox" MinWidth="30"> <TextBox.Text> <Binding Path="MaxUp" Mode="TwoWay" NotifyOnValidationError="True"> <Binding.ValidationRules> <Validators:MinMaxRangeValidatorRule Minimum="0" Maximum="{Binding Path=MaxLogins}" /> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox>

    the problem i am getting the following error:

    A 'Binding' cannot be set on the 'Maximum' property of type 'MinMaxRangeValidatorRule'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.

    what is the proper way to do the binding ?

    解决方案

    You're seeing this error because MinMaxRangeValidatorRule.Maximum needs to be a DependencyProperty if you want to bind it to MaxLogins, while it is probably a simple CLR property.

    The real problem is that MinMaxRangeValidatorRule should be able to inherit from ValidationRule AND from DependencyObject (to make Dependency Properties available). This is not possible in C#.

    I solved a similar problem in this way:

  • give a name to your validator rule

    <Validators:MinMaxRangeValidatorRule Name="MinMaxValidator" Minimum="0" />

  • in code behind, set the Maximum value whenever MaxLogins changes

    public int MaxLogins { get { return (int )GetValue(MaxLoginsProperty); } set { SetValue(MaxLoginsProperty, value); } } public static DependencyProperty MaxLoginsProperty = DependencyProperty.Register("MaxLogins ", typeof(int), typeof(mycontrol), new PropertyMetadata(HandleMaxLoginsChanged)); private static void HandleMinValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { mycontrol source = (mycontrol) d; source.MinMaxValidator.Maximum = (int) e.NewValue; }

  • 更多推荐

    WPF在有效性规则绑定属性

    本文发布于:2023-11-11 23:24:42,感谢您对本站的认可!
    本文链接:https://www.elefans.com/category/jswz/34/1579826.html
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:绑定   属性   有效性   规则   WPF

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!