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;
}
}
}
}
Hallo xbredoillex,
Error sollte meinem Verständnis nach eine komplette Fehlerbeschreibung liefern - diese kannst du dann abfragen.
@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.
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.
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
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.