Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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
.net 文本框的WPF验证,绑定应该是什么样子?_.net_Wpf_Validation_Xaml_Textbox - Fatal编程技术网

.net 文本框的WPF验证,绑定应该是什么样子?

.net 文本框的WPF验证,绑定应该是什么样子?,.net,wpf,validation,xaml,textbox,.net,Wpf,Validation,Xaml,Textbox,我正在尝试验证WPF中的文本框。我在网上找到了一些例子,我把一些东西放在一起。但现在它只是验证了一切,就好像它是错的一样。我被告知这是我的绑定,因为我不确定该绑定什么,我来这里是为了澄清:) 这是我的验证器: class TextRangeValidator:ValidationRule { 私有整数_最小长度=0; 私有int_最大长度=0; 私有字符串错误消息; 公共整数最小长度 { 获取{return\u minimumLength;} 设置{u minimumLength=value;}

我正在尝试验证WPF中的文本框。我在网上找到了一些例子,我把一些东西放在一起。但现在它只是验证了一切,就好像它是错的一样。我被告知这是我的绑定,因为我不确定该绑定什么,我来这里是为了澄清:)

这是我的验证器:

class TextRangeValidator:ValidationRule
{
私有整数_最小长度=0;
私有int_最大长度=0;
私有字符串错误消息;
公共整数最小长度
{
获取{return\u minimumLength;}
设置{u minimumLength=value;}
}
公共整数最大长度
{
获取{return\u maximumLength;}
设置{u maximumLength=value;}
}
公共字符串错误消息
{
获取{return\u errorMessage;}
设置{u errorMessage=value;}
}
公共覆盖验证结果验证(对象值,
文化资讯(文化资讯)
{
ValidationResult=新的ValidationResult(true,null);
string inputString=(string)value.ToString();
if(inputString.Lengththis.MaximumLength)
{
结果=新的ValidationResult(false,this.ErrorMessage);
}
返回结果;
}
}
以下是我的xaml代码:

<TextBox Height="23" HorizontalAlignment="Left" Margin="118,60,0,0" Name="CreateUserCPRTextbox" VerticalAlignment="Top" Width="120" >
    <TextBox.Text >
        <Binding Path="Name" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="true">
            <Binding.ValidationRules  >
                <validators:TextRangeValidator
                    ValidatesOnTargetUpdated="True"
                    MinimumLength="10"
                    MaximumLength="10"
                    ErrorMessage="CPR nummer ikke gyldigt" />
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>


现在我的binding属性名为name,我试图将它绑定到CreateUserCpTextBox.Text,但它不起作用。这是如何工作的?

您必须将其绑定到源和路径,例如以下简单对象:

public  class Class1
{
    public string Name { get; set; }
}
可以通过将对象添加到窗口及其资源集合来创建该对象。 源绑定到对象及其属性[Name]的路径,在本例中该属性为“0123456789”


最后,必须通过source={StaticResource class1}将其源绑定到此资源

<Grid>
    <TextBox Height="23" HorizontalAlignment="Left" Margin="118,60,0,0" Name="CreateUserCPRTextbox" VerticalAlignment="Top" Width="120" >
        <TextBox.Text >
            <Binding Source="{StaticResource class1}" Path="Name" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="true">
                <Binding.ValidationRules  >
                    <validators:TextRangeValidator ValidatesOnTargetUpdated="True" MinimumLength="10" MaximumLength="10" ErrorMessage="CPR nummer ikke gyldigt" />
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
    </TextBox>
</Grid>


接下来,您可以使用已验证的文本框播放一些内容。

我还尝试在xaml.cs文件中创建一个属性,并将文本框绑定到它。这也没有帮助。所以我必须创建一个新的c#类,只是为了拥有一个Textbox可以绑定到的属性所以我可以为我想要验证的所有属性创建一个类?你刚刚让我很开心,我已经为此烦恼了这么久。现在我只是想知道。为什么我不能不创建路径Textbox.text?这不也是一个属性吗?通常,您希望将textbox.text绑定到可以验证的对象,而不是绑定到它本身。这毫无意义。输入必须在应用程序逻辑中的某个地方。当然,您可以将其设置为任何(数据)源。
<Grid>
    <TextBox Height="23" HorizontalAlignment="Left" Margin="118,60,0,0" Name="CreateUserCPRTextbox" VerticalAlignment="Top" Width="120" >
        <TextBox.Text >
            <Binding Source="{StaticResource class1}" Path="Name" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="true">
                <Binding.ValidationRules  >
                    <validators:TextRangeValidator ValidatesOnTargetUpdated="True" MinimumLength="10" MaximumLength="10" ErrorMessage="CPR nummer ikke gyldigt" />
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
    </TextBox>
</Grid>