Laden...

Wie fragt man Informationen von IDataErrorInfo ab?

Erstellt von xbredoillex vor 14 Jahren Letzter Beitrag vor 14 Jahren 896 Views
X
xbredoillex Themenstarter:in
46 Beiträge seit 2009
vor 14 Jahren
Wie fragt man Informationen von IDataErrorInfo ab?

Hi,

ich experimentiere gerade mit IDataErrorInfo.

In der unten angehängte Klasse Person habe ich IDataErrorInfo (hoffentlich richtig) implementiert.

Leider komme ich an dieser Stelle nicht mehr weiter. Irgendwie erschließt sich mir nicht, wie man mit diesem Interface arbeitet und ich habe bisher kein Beispiel gefunden, das mir wirklich weiter hilft.

Angenommen ich hätte ein Objekt der Klasse Person und auf einem Form eine Textbox und ein Label.
Wie muss ich vorgehen, wenn über die Textbox ein Vorname für person.Vorname eingegeben wird und die Validierungsinformationen, falls vorhanden, im Label erscheinen sollen?
Wie komme ich an die IDataErrorInfo?

Gruß

xbredoillex



using System.ComponentModel;

namespace WindowsFormsApplication1
{
    public class Person : IDataErrorInfo
    {
        public string Vorname { get; set; }
        public string Nachname { get; set; }

        public Person()
        {
        }

        public string Error
        {
            get { return null; }
        }

        public string this[string propertyName]
        {
            get
            {
                if (propertyName == "Vorname")
                {
                    if (string.IsNullOrEmpty(Vorname))
                        return "Vorname fehlt";
                }
                
                if (propertyName == "Nachname")
                {
                    if (string.IsNullOrEmpty(Nachname))
                        return "Nachname fehlt";
                }

                return null;
            }
        }
    }
}


5.742 Beiträge seit 2007
vor 14 Jahren

Hallo xbredoillex,

Error sollte meinem Verständnis nach eine komplette Fehlerbeschreibung liefern - diese kannst du dann abfragen.

F
10.010 Beiträge seit 2004
vor 14 Jahren

@xbredoillex:
Das ist eine zwar syntaktisch richtige implementierung, aber eigentlich unbrauchbar.

Wie winSharp93 schon schrieb ist in error der gesammte Fehlertext enthalten,
und auch wenn es in so einem minifall sinn macht das validieren im Indexer zu machen,
so ist das doch eher selten wirklich brauchbar.

Wenn du das also mit dem error machst, kannst du es dann recht einfach selbst
benutzen, oder auch z.b. mit dem ErrorProvider.


void DisplayErrorInLabel(IDataErrorInfo errorInfoObject)
{
  
  if( errorInfoObject != null )
  {
    this.ErrorLable.Text = errorInfoObject.error;    
  }
}

Aufrufen kannst du die routine dann mit jedem object das IDataErrorInfo implementiert.

Besser geht es natürlich mit Validationframeworks.

5.299 Beiträge seit 2008
vor 14 Jahren

Hi xbedroullex!

Einiges zur Materie kannste dir bestimmt von IDataErrorInfo im typisierten Dataset rauspicken. Also da gehts nicht nur um Dataset.

Der frühe Apfel fängt den Wurm.

X
xbredoillex Themenstarter:in
46 Beiträge seit 2009
vor 14 Jahren

Danke für die Infos, ich glaube ich habe es jetzt gerafft 😃

Ab "wann" ist eine Validierung im Setter einer nicht all zu häufig gesetzten Property zu viel und sollte vermieden werden? Kann man das irgendwo festmachen (z.B. eine Faustregel)?
Ist eine komplexe Regex-Abfrage noch tolerierbar oder ist unter "zu viel" eher sowas wie vergleiche mit Datenbankeinträgen oder ähnlichem zu verstehen?

Gruß
xbredoillex

5.299 Beiträge seit 2008
vor 14 Jahren

Wie häufig eine Prop gesetzt wird ist glaub nicht das Kriterium. Ist glaub eher die Frage, ob du viele Props validieren willst, und auch in Zukunft viel mit Validation zu tun kriegst.
Da ist dann eine Einheitlichkeit schon ein ziemlicher Vorteil, wie ValidierungsFrameworks sie bieten, und bei Teamarbeit vermutlich gar keine Frage.
Bei kleinkram hingegen guck ich tendenziell eher, dass ich nicht so viel einbinden muß, nur wenig Code produziere, da weiche ich also mehr oder weniger oft ab vom Pfad, der mehr oder weniger als "Best Practicess" propagiert wird.
Aber ich bin auch Einzelkämpfer und Hobbybastler, da kann ich eh machen, was ich will 😉

Der frühe Apfel fängt den Wurm.