WPF DataGrid Validierungsfehler?

8

Dies kann eine beabsichtigte Funktionalität sein, aber es scheint für mich wie ein Fehler zu sein.

Ich benutze das Standard-WPF-DataGrid, das an eine ObservableCollection gebunden ist, und versuche , einige Validierungsregeln zu verwenden, um nettes Benutzerfeedback bereitzustellen. Unnötig zu sagen, dass es mehr Probleme gibt, als ich zählen kann, aber ich bleibe bei der sofortigen.

Hier ist eine Zusammenfassung des Problems:

  1. ItemsSource Eigenschaft an ObservableCollection<T> binden
  2. Füllen Sie die Sammlung
  3. auf
  4. Bearbeiten Sie ein Element im Raster so, dass ein Validierungsfehler auftritt
  5. Entfernen Sie das Programm programmatisch aus dem ObservableCollection<T>

Wenn diese Schritte ausgeführt werden, erkennt GridView ordnungsgemäß, dass das Objekt aus der Sammlung entfernt wurde, und entfernt die Zeile aus dem Raster. Das Grid befindet sich jetzt jedoch in einem ungültigen Zustand und es können keine weiteren Aktionen über die Benutzeroberfläche im Grid ausgeführt werden!

Auch dies scheint mir ein großer Fehler zu sein, da das programmatische Entfernen von Elementen aus einer Sammlung eine große Sache ist.

Ist jemand darauf gestoßen? Irgendwelche Vorschläge, wie man es umgehen kann?

Es ist erwähnenswert, dass ich eine separate Lösung erstellt habe, um dieses Problem zu isolieren, aber um einige Fragen zu beantworten, die Sie haben könnten:

Implementiert Ihr Objekt INotifyPropertyChanged ? YES

Ist das eine benutzerdefinierte Sammlung? Keine einfache alte ObservableCollection<T>

Wie entfernen Sie Objekte aus Ihrer Sammlung?

%Vor%

Wie binden Sie Ihre Validierungsregel?

%Vor%

Wie sieht Ihre Validierungsregel aus?

%Vor%     
Josh 17.02.2011, 20:14
quelle

3 Antworten

1

Ich hatte das gleiche Problem und nach langem Suchen fand ich eine Lösung:

Sie können eine Klasse erstellen, die vom DataGrid abgeleitet ist. Dort können Sie durch Reflexion auf die privaten Eigenschaften zugreifen. Wenn Sie nun ein ungültiges Element entfernen, können Sie die Funktion SetGridWritable () aufrufen und die anderen Werte sind wieder editierbar.

%Vor%     
Volker 24.01.2012 15:51
quelle
0

Ich habe eine Nicht-Lösungs-Lösung, wenn Sie interessiert sind:

Wir haben festgestellt, dass der gesamte Validierungsmechanismus voller unerwünschter Verhaltensweisen ist. Zum Beispiel - wir möchten unseren Benutzern erlauben, ungültige Daten einzugeben und nur den Fehler zu markieren.

Dafür haben wir eine Zellenvorlage mit einem roten Rahmen erstellt, die mit einem Datentrigger verbunden ist, der immer dann aufgerufen wird, wenn sich der Fehlerstatus einer bestimmten Eigenschaft ändert. Die eigentliche Erstellung des Datentriggers erfolgt über eine Abhängigkeitseigenschaft, die den Bindungspfad zur Eigenschaft des ViewModel empfängt und die Bindung erstellt.

d. h .:

%Vor%

Dies funktioniert bei Problemen mit Validierungsfehlern.

    
NightDweller 03.04.2011 17:21
quelle
0

Ich habe ein paar Stunden damit verbracht, herauszufinden, was vor sich geht. Schließlich wurde das Problem durch eine einfache Aktualisierung von Elementen gelöst. Hoffe, das hilft.

%Vor%     
user3870533 23.07.2014 21:02
quelle

Tags und Links