-1

我的验证在第一个实例中有效,但是当我从一个选项卡项转到另一个选项卡项并再次返回时,验证就消失了。

我本来希望这种状态一直存在,直到用户在这种情况下输入有效的通过标准。

也许这是预期的行为,我错过了文档中的一些内容。

在我的应用程序中,我有一个MainWindow.xaml和一个MainWindowViewModel.cs作为它的 DataContext,它继承自实现INotifyPropertyChangedINotifyDataErrorInfo的BaseViewModel.cs。然后我创建了一个名为FilePath.cs的自定义ValidationAttribute

MainWindow.xaml 包含一个带有两个选项卡项的选项卡控件。只有一个有一个文本框,我已经对其进行了验证。这在某种意义上是有效的,它会在验证不正确时通知我。在此示例中,文件路径不存在。

主窗口.xaml

  <TabControl>
        <TabItem Header="Boxs">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>

                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>

                <Label Grid.Column="0"
                       Grid.Row="0"
                       Content="File Path" />
                <TextBox Grid.Column="1"
                         Grid.Row="0"
                         Margin="5,5,5,5"
                         Text="{Binding FilePath, 
                                        Mode=TwoWay, 
                                        NotifyOnValidationError=True, 
                                        ValidatesOnNotifyDataErrors=True,
                                        UpdateSourceTrigger=PropertyChanged}" />
            </Grid>
        </TabItem>
        <TabItem Header="Blank"/>
    </TabControl>

主视图模型.cs

public class MainWindowViewModel : BaseViewModel
{
    private string filePath;

    [FilePath]
    public string FilePath
    {
        get { return filePath; }
        set
        {
            filePath = value;
            ValidateProperty(value);
            NotifyPropertyChanged(FilePath);
        }
    }
}

文件路径.cs

public sealed class FilePath : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (!Directory.Exists((string)value))
        {
            return new ValidationResult("Requires Valid File Path", 
                    new string[] { validationContext.MemberName });
        }

        return ValidationResult.Success;
    }
}
4

1 回答 1

0

不知道你的情况,但你可以试一试,

带有验证的文本框在选项卡更改时丢失 ErrorTemplate

顺便说一句,我不是反对者:)

于 2017-02-09T04:02:49.510 回答