Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.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的ValidationRules中设置自定义错误消息_C#_Wpf - Fatal编程技术网

C# 在WPF的ValidationRules中设置自定义错误消息

C# 在WPF的ValidationRules中设置自定义错误消息,c#,wpf,C#,Wpf,我把一切都安排得很好。如果我在ErrorMessage中设置了一些字符串,那么它将显示为无错误。 我想要的是,我想要动态/编程地设置ErrorMessage。某物 MyValidation.ErrorMessage = "some new message"; username.Update() //something XAML代码 <TextBox Margin="5" Name="userName"> <TextBox.Text> <Bin

我把一切都安排得很好。如果我在ErrorMessage中设置了一些字符串,那么它将显示为无错误。

我想要的是,我想要动态/编程地设置ErrorMessage。某物

MyValidation.ErrorMessage = "some new message";
username.Update() //something

XAML代码

<TextBox Margin="5" Name="userName">
   <TextBox.Text>
      <Binding RelativeSource="{RelativeSource Self}" Path="Tag" Mode="OneWayToSource" UpdateSourceTrigger="PropertyChanged">
         <Binding.ValidationRules>
            <local:MyValidation ErrorMessage="Static String" />
         </Binding.ValidationRules>
      </Binding>
   </TextBox.Text>
</TextBox>
可以在viewmodel中实现。实现
GetErrors(string)
,以便根据您的情况返回不同的错误消息。您甚至可以一次返回多条消息,它们将显示在彼此下方


这是一个很好的解决方案,但是您可以自己实现它。请记住,并不是只有一种正确的方法,界面给了您很大的自由。

如果您在XAML标记中为
验证规则
命名:

<Binding.ValidationRules>
    <local:MyValidation x:Name="val" ErrorMessage="Static String" />
</Binding.ValidationRules>

你不能把它绑在模型上吗?没有线索?云,你让我知道怎么做@JonathanAlfaroYou无法绑定它,因为
ErrorMessage
不是
依赖属性。您不能实现一个,因为您只能从单个类派生,因此不能从
DependencyObject
额外派生。但是为什么要将
TextBox.Text
绑定到
TextBox.Tag
?为什么错误消息必须是动态的,由外部源设置?消息通常由规则本身根据实际验证结果设置。什么都没有dynamic@BionicCode谢谢,但我真的想从外部源设置错误。还有别的办法吗?除此之外还有其他解决方案吗?一切皆有可能。如果你能解释一下你到底想实现什么以及为什么,我可以为你提供一个合适的解决方案。也许你走错了路,兄弟你救了我。非常感谢你。
<Binding.ValidationRules>
    <local:MyValidation x:Name="val" ErrorMessage="Static String" />
</Binding.ValidationRules>
val.ErrorMessage = "some new message";
userName.GetBindingExpression(TextBox.TextProperty)?.UpdateSource();