Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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
Validation 我不明白如何使用模板10验证调用验证逻辑_Validation_Data Binding_Uwp_Uwp Xaml_Template10 - Fatal编程技术网

Validation 我不明白如何使用模板10验证调用验证逻辑

Validation 我不明白如何使用模板10验证调用验证逻辑,validation,data-binding,uwp,uwp-xaml,template10,Validation,Data Binding,Uwp,Uwp Xaml,Template10,我一直在尝试用模板10验证来复制最简单的验证逻辑,但我只是不明白 我创建了我的模型,就像github示例中的wiki: public class User : ValidatableModelBase { //public User() //{ // FirstName = string.Empty; // LastName = string.Empty; // Validator = i => // { //

我一直在尝试用模板10验证来复制最简单的验证逻辑,但我只是不明白

我创建了我的模型,就像github示例中的wiki:

public class User : ValidatableModelBase
{
    //public User()
    //{
    //    FirstName = string.Empty;
    //    LastName = string.Empty;
    //    Validator = i =>
    //    {
    //        var u = i as User;
    //        if (string.IsNullOrEmpty(u.FirstName))
    //            u.Properties[nameof(u.FirstName)].Errors.Add("The first name is required");
    //        else if (u.FirstName.Length <= 3)
    //            u.Properties[nameof(u.FirstName)].Errors.Add("First Name must be greater than 3 chars.");

    //        if (string.IsNullOrEmpty(u.LastName))
    //            u.Properties[nameof(u.LastName)].Errors.Add("The last name is required");
    //        else if (u.LastName.Length <= 3)
    //            u.Properties[nameof(u.LastName)].Errors.Add("Last Name must be greater than 3 chars.");
    //    };
    //}

    public int Id { get; set; }
    public string FirstName
    {
        get
        {
            return Read<string>();
        }
        set
        {
            Write(value);
        }
    }
    public string LastName
    {
        get
        {
            return Read<string>();
        }
        set
        {
            Write(value);
        }
    }
    public override string ToString() => $"{FirstName} {LastName}";
}
公共类用户:ValidatableModelBase
{
//公共用户()
//{
//FirstName=string.Empty;
//LastName=string.Empty;
//验证程序=i=>
//    {
//var u=i作为用户;
//if(string.IsNullOrEmpty(u.FirstName))
//u.Properties[nameof(u.FirstName)]。错误。添加(“必须输入名字”);

//否则,如果(u.FirstName.LengthDamn,我太累了,但我的错误太简单了,我忘了在父面板上设置DataContext,在这种情况下,我应该添加DataContext={Binding Model} 这在相对面板或任何其他面板中的XAML处进行

提出这个问题,我感到很尴尬

public class MainPageViewModel : ViewModelBase
{
    public MainPageViewModel()
    {
        User = new User
        {
            FirstName = string.Empty,
            LastName = string.Empty,
            Validator = i =>
            {
                var u = i as User;
                if (string.IsNullOrEmpty(u.FirstName))
                    u.Properties[nameof(u.FirstName)].Errors.Add("The first name is required");
                else if (u.FirstName.Length <= 3)
                    u.Properties[nameof(u.FirstName)].Errors.Add("First Name must be greater than 3 chars.");

                if (string.IsNullOrEmpty(u.LastName))
                    u.Properties[nameof(u.LastName)].Errors.Add("The last name is required");
                else if (u.LastName.Length <= 3)
                    u.Properties[nameof(u.LastName)].Errors.Add("Last Name must be greater than 3 chars.");
            },
        };
    }

    private User _User;

    public User User
    {
        get { return _User; }
        set { _User = value; }
    }


    public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary<string, object> suspensionState)
    {
        User.Validate();
        await Task.CompletedTask;
    }

    public override async Task OnNavigatingFromAsync(NavigatingEventArgs args)
    {
        args.Cancel = false;
        await Task.CompletedTask;
    }

    public void GotoSettings() =>
        NavigationService.Navigate(typeof(Views.SettingsPage), 0);

    public void GotoPrivacy() =>
        NavigationService.Navigate(typeof(Views.SettingsPage), 1);

    public void GotoAbout() =>
        NavigationService.Navigate(typeof(Views.SettingsPage), 2);

}
<Page x:Class="ValidationSample.Views.MainPage"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:Behaviors="using:Template10.Behaviors"
  xmlns:Core="using:Microsoft.Xaml.Interactions.Core"
  xmlns:Interactivity="using:Microsoft.Xaml.Interactivity"
  xmlns:controls="using:Template10.Controls"
  xmlns:validate="using:Template10.Controls.Validation"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:local="using:ValidationSample.Views"
  xmlns:m="using:ValidationSample.Models"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  xmlns:vm="using:ValidationSample.ViewModels" mc:Ignorable="d">

<Page.DataContext>
    <vm:MainPageViewModel x:Name="ViewModel" />
</Page.DataContext>

<RelativePanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="AdaptiveVisualStateGroup">
            <VisualState x:Name="VisualStateNarrow">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="{StaticResource NarrowMinWidth}" />
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <!--  TODO: change properties for narrow view  -->
                    <!--<Setter Target="stateTextBox.Text" Value="Narrow Visual State" />-->
                </VisualState.Setters>
            </VisualState>
            <VisualState x:Name="VisualStateNormal">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="{StaticResource NormalMinWidth}" />
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <!--  TODO: change properties for normal view  -->
                    <!--<Setter Target="stateTextBox.Text" Value="Normal Visual State" />-->
                </VisualState.Setters>
            </VisualState>
            <VisualState x:Name="VisualStateWide">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="{StaticResource WideMinWidth}" />
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <!--  TODO: change properties for wide view  -->
                    <!--<Setter Target="stateTextBox.Text" Value="Wide Visual State" />-->
                </VisualState.Setters>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>

    <controls:PageHeader x:Name="pageHeader" RelativePanel.AlignLeftWithPanel="True"
                         RelativePanel.AlignRightWithPanel="True"
                         RelativePanel.AlignTopWithPanel="True" Text="Main Page">

        <!--  secondary commands  -->
        <controls:PageHeader.SecondaryCommands>
            <AppBarButton Click="{x:Bind ViewModel.GotoSettings}" Label="Settings" />
            <AppBarButton Click="{x:Bind ViewModel.GotoPrivacy}" Label="Privacy" />
            <AppBarButton Click="{x:Bind ViewModel.GotoAbout}" Label="About" />
        </controls:PageHeader.SecondaryCommands>

    </controls:PageHeader>

    <validate:ControlWrapper PropertyName="FirstName"                                  
                             RelativePanel.AlignLeftWithPanel="True"
                             RelativePanel.Below="pageHeader">
        <TextBox Width="300"
                 Margin="12,0,0,0"
                 Header="First Name"
                 Text="{Binding FirstName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
    </validate:ControlWrapper>

</RelativePanel>