Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#/WPF-整数下降控制属性已更改_C#_Wpf_Wpf Extended Toolkit - Fatal编程技术网

C#/WPF-整数下降控制属性已更改

C#/WPF-整数下降控制属性已更改,c#,wpf,wpf-extended-toolkit,C#,Wpf,Wpf Extended Toolkit,我使用的是来自以下站点的IntegerUpDown: 我的问题是,即使可以设置最小值和最大值,我也可以使用数字键盘更新超出该范围的值。此外,如果输入了超出允许范围的任何整数,则不会触发属性更改事件,因此每当用户决定从键盘输入数字时,我无法验证输入-因此,即使对于大数字,我的按钮也会保持启用状态。我怎样才能解决这个问题?是否有方法触发属性更改事件或禁用键盘 因此,发生的情况是: public Int32 ProposedGrade { get { return _proposedGra

我使用的是来自以下站点的
IntegerUpDown


我的问题是,即使可以设置最小值和最大值,我也可以使用数字键盘更新超出该范围的值。此外,如果输入了超出允许范围的任何整数,则不会触发属性更改事件,因此每当用户决定从键盘输入数字时,我无法验证输入-因此,即使对于大数字,我的按钮也会保持启用状态。我怎样才能解决这个问题?是否有方法触发属性更改事件或禁用键盘

因此,发生的情况是:

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");
        }
    }
}
public Int32 ProposedGrade
{
获取{return\u proposedGrade;}
专用设备
{
如果(_proposedGrade!=值)
{
_建议等级=价值;
如果(_proposedGrade>0&&u proposedGrade<6)
{
EnableGradeApproval=true;
OnPropertyChanged(“EnableGradeApproval”);
}
其他的
{
EnableGradeApproval=false;
OnPropertyChanged(“EnableGradeApproval”);
}
物业变更(“拟议交易”);
}
}
}

例如,如果我从键盘输入7,则不会被调用。如果我输入4,它确实会被调用,但是我不需要禁用等级审批,因此在这方面没有多大用处。

您可以处理
IntegerUpDown
控件的
加载事件,并将
文本框的
IsReadOnly
属性设置为
false
设置为“禁用
文本框
”:


你解决了你的DataGrid问题吗?老实说,我不太了解代理对象解决方案,所以我只是用一个额外的弹出窗口和一些验证来解决它。。。将在下周晚些时候返回。请删除Maximum属性,并在Property setter中手动验证它。如果value>您的最大值,就不要将其分配给字段,也不要调用OnPropertyChanged()。@Yevgeniy这就是问题所在!如果我输入无效数据,setter根本不会被调用!例如,如果我输入256,setter会被调用为2,然后不会被调用为5和6,因此2保留
\u proposedGrade
值,这显然是不友好的。如果从IntegerUpDown中删除Maximum属性,setter不会被调用吗?根据文档,元素布局时会发生
加载的
>,呈现,并准备好进行交互。因此,我不确定这将如何帮助我在
IntegerUpDown
上进行用户交互/值更新。好吧,试试代码,你会发现它是有效的……按照上面的方法处理加载的事件显然是有效的。你可能想考虑投票赞成的答案:
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");
        }
    }
}
<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;
    }
}