C#/WPF - IntegerUpDown 控件 PropertyChanged
C#/WPF - IntegerUpDown Control PropertyChanged
我正在使用来自 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" />
我的问题是,即使可以设置最小值和最大值,我也可以使用数字键盘更新超出该范围的值。此外,如果输入允许范围之外的任何整数,则 属性 更改事件不会触发,因此每当用户决定从键盘输入数字时我都无法验证输入 - 因此我的即使对于大数字,按钮也保持启用状态。我该如何解决这个问题?有没有办法触发 属性 changed 事件,或者禁用键盘?
那么发生的事情是:
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,它确实会被调用,但是我不需要禁用等级批准,所以用处不大。
您可以处理 IntegerUpDown
控件的 Loaded
事件并将 TextBox
的 IsReadOnly
属性 设置为 false
以"disable the 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"/>
private void gradeBox_Loaded(object sender, RoutedEventArgs e)
{
var textBox = gradeBox.Template.FindName("PART_TextBox", gradeBox) as Xceed.Wpf.Toolkit.WatermarkTextBox;
if (textBox != null)
{
textBox.IsReadOnly = true;
}
}
我正在使用来自 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" />
我的问题是,即使可以设置最小值和最大值,我也可以使用数字键盘更新超出该范围的值。此外,如果输入允许范围之外的任何整数,则 属性 更改事件不会触发,因此每当用户决定从键盘输入数字时我都无法验证输入 - 因此我的即使对于大数字,按钮也保持启用状态。我该如何解决这个问题?有没有办法触发 属性 changed 事件,或者禁用键盘?
那么发生的事情是:
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,它确实会被调用,但是我不需要禁用等级批准,所以用处不大。
您可以处理 IntegerUpDown
控件的 Loaded
事件并将 TextBox
的 IsReadOnly
属性 设置为 false
以"disable the 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"/>
private void gradeBox_Loaded(object sender, RoutedEventArgs e)
{
var textBox = gradeBox.Template.FindName("PART_TextBox", gradeBox) as Xceed.Wpf.Toolkit.WatermarkTextBox;
if (textBox != null)
{
textBox.IsReadOnly = true;
}
}