سؤال

أنا أبحث في مكونات WPF في مربع الأدوات ولكن لا يمكنني العثور على مزود الخطأ الموجود في 2005/2008.

هل تمت إزالته؟

هل كانت مفيدة؟

المحلول

ال errorprovider. هو عنصر تحكم WinForms. لا يوجد أي ما يعادله في WPF. ولكنك ستظل قادرا على العثور في Visual Studio 2008 إذا قمت بإنشاء مشروع فوز نماذج.

قد ترغب في إلقاء نظرة على هذه المقالة خطأ في التحقق من الصحة في WPF. وبعد لديها بعض الاقتراحات والأفكار المفيدة لكيفية التعامل مع التحقق من الصحة.

نصائح أخرى

.NET 3.5 إضافة WPF دعم idataerrorinfo: التحقق من صحة البيانات في .NET 3.5.

اعذرني أولا للتعليق على مناقشة قديمة مثل هذه، ولكن هذا يمكن أن يساعد عندما كان لدي نفس السؤال، وساعدني رابط سيمون على "البدء بشيء"

يمكنني اختبار Simon P.Stevens تعليمي، لكن بصراحة لم أعجب ذلك كثيرا:

  • باستخدام ResponseTemplate يجعل الاستجابة أبطأ عند عرض الخطأ.
  • هذا يعمل فقط إذا كانت القاعدة هي نفسها دائما بنفس الفئة (في حالتي، فأنا أحيانا أن تكون في بعض الأحيان سلبية، وأحيانا لا).
  • في حالة تطبيق دولي (في حالتي)، ليس لدى المكتبات الخارجية إمكانية الوصول إلى الموارد حيث ترجمات، لذلك لا يمكنني تعيين رسالة مخصصة.

أعتقد أن استخدام MVVM يتم تكييفه جيدا لإدارة أي موقف:

قمت بتعيين صندوق النص الخاص بي، مع فرشاة الحدود، وتجميع تلميح الأدوات، فيما يتعلق بظروفي، سأخفي / عرض تلميح الأدوات، حدود اللون:

XAML:

<TextBox x:Name="tbName" Grid.Column="1" Grid.Row="0" Margin="3" LostFocus="tbName_LostFocus" BorderBrush="{Binding BordertbName}"
                 Text="{Binding MonRepere.Nom}" ToolTipService.ToolTip="{Binding ErrorName}" ToolTipService.IsEnabled="{Binding ToolTipNameEnable}"/>

الرمز وراء (LostFocus = إجازة لمن تعتاد على WindowsForm):

private void tbName_LostFocus(object sender, RoutedEventArgs e)
    {
        if(tbName.Text=="")
        {
            this.mv.ErrorName = Properties.Resources.ErrorEmpty;

        }
        else
        {
            mv.ErrorName = "";
        }
    }

ثم viewmodel:

private string errorName;
            public string ErrorName
            {
                get { return errorName; }
                set
                {
                    errorName = value;
                    if (value == "")
                    {
                        ToolTipNameEnable = false;
                        BordertbName = Brushes.Gray;
                    }
                    else
                    {
                        ToolTipNameEnable = true;
                        BordertbName = Brushes.Red;
                    }
                    this.NotifyPropertyChanged("ErrorName");
                }
            }
            private Brush bordertbName;
            public Brush BordertbName
            {
                get { return bordertbName; }
                set
                {
                    bordertbName = value;
                    this.NotifyPropertyChanged("BordertbName");
                }
            }
            private bool toolTipNameEnable;
            public bool ToolTipNameEnable
            {
                get { return toolTipNameEnable; }
                set
                {
                    toolTipNameEnable = value;
                    this.NotifyPropertyChanged("ToolTipNameEnable");
                }
            }

فقط مفيدة للغاية عندما تكون القواعد محددة فيما يتعلق بالوضع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top