かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

ValidationSummaryコントロール

画面内のBindingでValidationExceptionあたりを投げると、いい感じに表示してくれるValidationSummaryコントロールというものがあります。
こいつに、自分で任意のメッセージとか仕込めないのか少し探ってみます。

ヘルプを見ると、どうやらErrorsプロパティにValidationSummaryItemクラスを追加すると、メッセージが表示されるらしいです。
ということで以下のコードを書いてみました。

MainPage.xaml

<UserControl xmlns:dataInput="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.Input"  x:Class="ValidationSummaryTest.MainPage"
    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" d:DesignWidth="640" d:DesignHeight="480">
    <StackPanel x:Name="LayoutRoot">
        <TextBox x:Name="input" />
        <Button Content="追加" Click="AddButton_Click" />
        <dataInput:ValidationSummary x:Name="summary"></dataInput:ValidationSummary>
    </StackPanel>
</UserControl>

TextBoxと、Buttonと、ValidationSummaryを置いただけのシンプルなつくりです。
TextBoxとValidationSummaryには、x:Name属性をつけているので、コードビハインドからinputとsummaryという名前で、アクセス出来るようにしています。

ここでは、簡単に、TextBoxに入力した内容を、ValidationSummaryに追加してみます。

MainPage.xaml.cs

using System.Windows;
using System.Windows.Controls;

namespace ValidationSummaryTest
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void AddButton_Click(object sender, RoutedEventArgs e)
        {
            // ValidationSummaryItemを作って追加する。
            // コンストラクタには、表示させたいメッセージをセットする。
            var item = new ValidationSummaryItem(input.Text);
            summary.Errors.Add(item);
        }
    }
}

これで実行してTextBoxに適当なメッセージを入れてボタンを押すと下のような結果になります。

うん、ばっちり。