C# 基于布尔绑定为文本框提供两个验证规则

C# 基于布尔绑定为文本框提供两个验证规则,c#,wpf,xaml,C#,Wpf,Xaml,我目前有一个文本框,它有一个验证规则ModelPathWithFolderRule <TextBox Name="ModelNameBox" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2"> <TextBox.

我目前有一个
文本框
,它有一个验证规则
ModelPathWithFolderRule

<TextBox Name="ModelNameBox"
                       Grid.Row="2"
                       Grid.Column="0"
                       Grid.ColumnSpan="2">
  <TextBox.Text>
    <Binding Path="ModelUploadName" UpdateSourceTrigger="PropertyChanged">
      <Binding.ValidationRules>
        <validationRules:ModelPathWithFolderRule />
      </Binding.ValidationRules>
    </Binding>
  </TextBox.Text>
</TextBox>

当布尔属性
IsLimitedUserGroup
true
时,我想用
LimitedUserUploadPathRule
替换验证规则

我试图通过简单地创建两个具有不同规则的文本框并交替它们的可见性来解决这个问题。但是,这不起作用,因为文本框的
名称不能使用两次,并且该名称用于生成错误消息,因此我希望两个文本框的名称保持不变


我还能怎么做呢?我希望继续使用
验证规则
,并将其保存在Xaml代码本身中。

如果您想在Xaml中执行此操作,可以创建一种样式,根据
IsLimitedUserGroup
属性切换
文本
的绑定。这样,您可以指定不同的验证规则

<Style x:Key="MyTextBoxStyle" TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
   <Setter Property="Text">
      <Setter.Value>
         <Binding Path="ModelUploadName" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
               <local:ModelPathWithFolderRule />
            </Binding.ValidationRules>
         </Binding>
      </Setter.Value>
   </Setter>
   <Style.Triggers>
      <DataTrigger Binding="{Binding IsLimitedUserGroup}" Value="True">
         <Setter Property="Text">
            <Setter.Value>
               <Binding Path="ModelUploadName" UpdateSourceTrigger="PropertyChanged">
                  <Binding.ValidationRules>
                     <local:LimitedUserUploadPathRule />
                  </Binding.ValidationRules>
               </Binding>
            </Setter.Value>
         </Setter>
      </DataTrigger>
   </Style.Triggers>
</Style>
<TextBox Name="ModelNameBox"
         Style="{StaticResource MyTextBoxStyle}"
         Grid.Row="2"
         Grid.Column="0"
         Grid.ColumnSpan="2"/>