C#/ WPF - IntegerUpDown控件PropertyChanged

时间:2017-05-17 12:14:13

标签: c# wpf wpf-extended-toolkit

我使用Extended WPF Toolkit中的IntegerUpDown

<xctk:IntegerUpDown Value="{Binding ProposedGrade, Mode=TwoWay}" Name="gradeBox" Margin="118,10,32,0" FormatString="N0" DefaultValue="1" Increment="1" Minimum="1" Maximum="5" Grid.Row="1" Grid.Column="1"/>
<Button Content="Approve grade" IsEnabled="{Binding EnableGradeApproval}" Command="{Binding SaveGradeCommand }" Margin="50,66,172,-56" Grid.Row="1" />

我的问题是,即使可以设置最小值和最大值,我也可以使用数字键盘更新超出该范围的值。此外,如果输入了允许范围之外的任何整数,则属性更改事件不会触发,因此,只要用户决定从键盘输入数字,我就无法验证输入 - 因此我的按钮保持启用,即使是大数字。我怎么解决这个问题?有没有办法可以触发属性更改事件,还是禁用键盘?

所以会发生这样的事情:

public Int32 ProposedGrade
{
    get { return _proposedGrade; }
    private set
    {
        if (_proposedGrade != value)
        {
            _proposedGrade = value;
            if (_proposedGrade > 0 && _proposedGrade < 6)
            {
                EnableGradeApproval = true;
                OnPropertyChanged("EnableGradeApproval");
            }
            else
            {
                EnableGradeApproval = false;
                OnPropertyChanged("EnableGradeApproval");

            }
            OnPropertyChanged("ProposedGrade");
        }
    }
}

如果我从键盘输入7,则不会被调用。如果我输入4,它会被调用,但是我不需要禁用等级批准,因此没有太多用处。

1 个答案:

答案 0 :(得分:-1)

您可以处理Loaded控件的IntegerUpDown事件,并将IsReadOnly的{​​{1}}属性设置为TextBox以“禁用false }}“:

TextBox
<xctk:IntegerUpDown Value="{Binding ProposedGrade, Mode=TwoWay}" Name="gradeBox" Margin="118,10,32,0" FormatString="N0" 
                    DefaultValue="1" Increment="1" Minimum="1" Maximum="5" Grid.Row="1" Grid.Column="1"
                    Loaded="gradeBox_Loaded"/>