2009-09-09 1 views
8

Kann IDataError Info ordnungsgemäß in einer Winforms-Anwendung verwandt werden? In der Vergangenheit habe ich meine Bindung auf die übliche Weise (1) durchgeführt und die Validierung im OnValidating-Ereignis der jeweiligen Kontrolle durchgeführt. Ich möchte die Datenvalidierung in das Domänenmodell verschieben, um die Benutzerschnittstellen einfach austauschen zu können und die gesamte Logik an einem Ort zu haben.IDataErrorInfo in winforms

Ich habe in IDataErrorInfo gesucht, aber alles, was ich finde, befasst sich mit WPF und die App in der Entwicklung ist ausschließlich eine Winforms App.

Ich habe auch bemerkt, dass die Bindung, die in WPF in System.Windows.Data ist und die Bindung gewöhnt, dass ich immer habe, ist mit in System.Windows.Forms (was ich ich nicht zu haben scheinen, wenn versuche, es als Ressource hinzuzufügen - ich benutze 3,5). Abgesehen von der Eigenschaft "ValidatesOnDataErrors" gibt es einen Unterschied zwischen den beiden?

(1) die übliche Art und Weise Wesen:

myControl.DataBindings.Add(new Binding("Text", this.domainModel, "Property")); 

Antwort

9

Dies funktioniert mit der Komponente ErrorProvider in Windows Forms.

Für ein vollständiges, aber sehr einfaches und kurzes Tutorial, siehe this blog post.

+0

+1 Fantastischer Blogbeitrag. Geheilt alle meine derzeitigen Leiden. Vielen Dank. –

+4

Sieht so aus, als ob der Link zum * fantastischen Blogpost * kaputt ist: Dieser Link wird nur veraltet angezeigt. –

+0

@ Bjørn-RogerKringsjå Es ist eigentlich keine Link-Only-Antwort. Der Vorschlag über 'ErrorProvider' macht dies zu einer Antwort ohne den Link. – Taryn

1

Ja, IDataErrorInfo Werke in WinForms. Zum Beispiel wird DataGridView dies automatisch sowohl pro Zeile als auch pro Zelle verwenden. Aber es ist implementierungsspezifisch und wird nicht automatisch auf andere Bindungen angewendet. wird automatisch angewendet. Ich habe einmal Code geschrieben, um es einem Fehler-Provider zuzuordnen und die Arbeit über Änderungsereignisse zu erledigen, aber ich habe es leider nicht zur Hand. Aber ich erinnere mich, dass es nicht riesig war.