3

入力の形式が正しくない場合に、Silverlight DataGrid の既定のエラー メッセージを変更しようとしています。たとえば、数値フィールドに文字を入力します。タブを離すと、「入力の形式が正しくありません」と表示されます。これを修正する方法を見てきました。それは、カスタム エラー メッセージを使用して検証属性を設定することです。問題は、オブジェクトが RIA サービスから来ていることです。検証属性からのカスタム エラー メッセージを無視しているようです。これを公開するために何かする必要がありますか?前もって感謝します。

4

3 に答える 3

1

エラーはプロパティではなくコントロールで発生するため、検証属性/メタデータ属性はここでは役に立ちません。int文字列値をキャストできないため、コントロールは型 (またはその他の数値型)のセッターを呼び出すことができません。また、デフォルトのエラー メッセージを変更できることも知りたいです...

可能な回避策は、次のような数値入力のみを許可するカスタム TextBox を使用することです。

public class NumericTextBox : TextBox
{
    public NumericTextBox()
    {
        this.KeyDown += new KeyEventHandler(NumericTextBox_KeyDown);
    }

    void NumericTextBox_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Back || e.Key == Key.Shift || e.Key == Key.Escape || e.Key == Key.Tab || e.Key == Key.Delete)
            return;

        if (e.Key < Key.D0 || e.Key > Key.D9)
        {
            if (e.Key < Key.NumPad0 || e.Key > Key.NumPad9)
            {
                    e.Handled = true;
            }
        } 
    }
}
于 2011-08-31T08:36:54.577 に答える
0

機能する唯一のソリューションは次のとおりです (これはクライアント側にあります)。

public partial class MyEntity        
{
    public string MyField_string
    {
        get
        {
            return MyField.ToString();
        }
        set
        { 
            decimal res = 0;
            var b = Decimal.TryParse(value, out res);
            if (!b)
                throw new ArgumentException("Localized message");
            else
                this.MyField = Math.Round(res, 2);
        }
    }

    partial void OnMyFieldChanged()
    {
        RaisePropertyChanged("MyField_string");
    }
}

そして、MyField の代わりに MyField_string にバインドします。

于 2013-05-13T16:31:24.513 に答える
0

オブジェクトのメタデータが設定されていないようです。 これにより、メタデータが 自動的に作成され、注釈が Silverlight プロジェクトに取り込まれます。

于 2011-08-31T01:42:45.413 に答える