「東雲 忠太郎」の平凡な日常のできごと

「東雲 忠太郎」の平凡な日常のできごと

2024.08.04
XML
カテゴリ: WPFC#.NET


C# WPF で `Validator` クラスを使用するサンプルコードを示します。ここでは、ユーザー名とメールアドレスに対するバリデーションを実装します。


## プロジェクトの設定



   Visual Studio で新しい WPF アプリケーションプロジェクトを作成します。


## クラスの構成


### モデル (Model)


```csharp

using System.ComponentModel.DataAnnotations;


public class User

{

    [Required(ErrorMessage = "User Name is required.")]

    public string UserName { get; set; }


    [Required(ErrorMessage = "Email is required.")]

    [EmailAddress(ErrorMessage = "Invalid Email Address.")]

    public string Email { get; set; }

}

```


### ビュー モデル (ViewModel)


```csharp

using System.Collections.Generic;

using System.ComponentModel;

using System.ComponentModel.DataAnnotations;

using System.Linq;

using System.Windows.Input;


public class MainViewModel : INotifyPropertyChanged

{

    private User _user;

    private string _validationErrors;


    public User User

    {

        get => _user;

        set

        {

            _user = value;

            OnPropertyChanged(nameof(User));

        }

    }


    public string ValidationErrors

    {

        get => _validationErrors;

        set

        {

            _validationErrors = value;

            OnPropertyChanged(nameof(ValidationErrors));

        }

    }


    public MainViewModel()

    {

        User = new User();

    }


    public ICommand SubmitCommand => new RelayCommand(Submit);


    private void Submit()

    {

        var context = new ValidationContext(User, serviceProvider: null, items: null);

        var results = new List<ValidationResult>();


        bool isValid = Validator.TryValidateObject(User, context, results, true);


        if (isValid)

        {

            ValidationErrors = "Validation passed!";

            // Submit logic here

        }

        else

        {

            ValidationErrors = string.Join("\n", results.Select(r => r.ErrorMessage));

        }

    }


    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string propertyName)

    {

        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

    }

}

```


### コマンド (RelayCommand)


```csharp

using System;

using System.Windows.Input;


public class RelayCommand : ICommand

{

    private readonly Action _execute;

    private readonly Func<bool> _canExecute;


    public RelayCommand(Action execute, Func<bool> canExecute = null)

    {

        _execute = execute;

        _canExecute = canExecute;

    }


    public bool CanExecute(object parameter)

    {

        return _canExecute == null || _canExecute();

    }


    public void Execute(object parameter)

    {

        _execute();

    }


    public event EventHandler CanExecuteChanged

    {

        add => CommandManager.RequerySuggested += value;

        remove => CommandManager.RequerySuggested -= value;

    }

}

```


### ビュー (View)


`MainWindow.xaml`:


```xml

<Window x:Class="WpfApp.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        mc:Ignorable="d"

        Title="MainWindow" Height="350" Width="525">

    <Grid>

        <StackPanel>

            <TextBox Text="{Binding User.UserName, UpdateSourceTrigger=PropertyChanged}" 

                     Margin="10" Width="200" Height="30" />

            <TextBox Text="{Binding User.Email, UpdateSourceTrigger=PropertyChanged}" 

                     Margin="10" Width="200" Height="30" />

            <Button Content="Submit" Command="{Binding SubmitCommand}" Margin="10" Width="100" Height="30" />

            <TextBlock Text="{Binding ValidationErrors}" Margin="10" Foreground="Red" />

        </StackPanel>

    </Grid>

</Window>

```


`MainWindow.xaml.cs`:


```csharp

public partial class MainWindow : Window

{

    public MainWindow()

    {

        InitializeComponent();

        DataContext = new MainViewModel();

    }

}

```


この例では、`User` モデルにバリデーション属性を設定し、`MainViewModel` クラスで `Validator` クラスを使用してバリデーションを実行します。バリデーション結果は `ValidationErrors` プロパティに格納され、ビュー (View) で表示されます。






お気に入りの記事を「いいね!」で応援しよう

Last updated  2024.08.04 14:05:14


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: