Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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
Silverlight “更改默认值”;“输入的格式不正确”;RIA服务中的验证错误_Silverlight_Datagrid_Wcf Ria Services_Validationattribute - Fatal编程技术网

Silverlight “更改默认值”;“输入的格式不正确”;RIA服务中的验证错误

Silverlight “更改默认值”;“输入的格式不正确”;RIA服务中的验证错误,silverlight,datagrid,wcf-ria-services,validationattribute,Silverlight,Datagrid,Wcf Ria Services,Validationattribute,当输入的格式不正确时,我试图更改Silverlight数据网格中的默认错误消息。例如,在数字字段中键入字母。当你把标签移开时,它会说“输入的格式不正确”。我已经看到了如何解决这个问题,也就是说,在上面添加一个带有自定义错误消息的验证属性。问题是,我的对象来自RIA服务。它似乎忽略了来自验证属性的自定义错误消息。我需要做些什么来揭露这件事吗?提前感谢。听起来您没有为对象设置元数据。 这将为您创建它,并将注释带到silverlight项目。验证属性/元数据属性在这里没有帮助,因为错误发生在控件上,而

当输入的格式不正确时,我试图更改Silverlight数据网格中的默认错误消息。例如,在数字字段中键入字母。当你把标签移开时,它会说“输入的格式不正确”。我已经看到了如何解决这个问题,也就是说,在上面添加一个带有自定义错误消息的验证属性。问题是,我的对象来自RIA服务。它似乎忽略了来自验证属性的自定义错误消息。我需要做些什么来揭露这件事吗?提前感谢。

听起来您没有为对象设置元数据。
这将为您创建它,并将注释带到silverlight项目。

验证属性/元数据属性在这里没有帮助,因为错误发生在控件上,而不是属性上。 控件无法调用类型为
int
(或任何其他数字类型)的setter,因为无法转换字符串值。 我还想知道您可以更改默认错误消息

一种可能的解决方法是使用仅允许数字输入的自定义文本框,如下所示:

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;
            }
        } 
    }
}
公共类NumericTextBox:TextBox
{
公共数字文本框()
{
this.KeyDown+=新的KeyEventHandler(NumericTextBox\u KeyDown);
}
void NumericTextBox_KeyDown(对象发送方,KeyEventArgs e)
{
如果(e.Key==Key.Back | e.Key==Key.Shift | e.Key==Key.Escape | e.Key==Key.Tab | e.Key==Key.Delete)
返回;
如果(e.KeyKey.D9)
{
如果(e.KeyKey.NumPad9)
{
e、 已处理=正确;
}
} 
}
}

唯一有效的解决方案是(这是在客户端):

然后绑定到MyField\u字符串而不是MyField

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");
    }
}