Ich habe einige Benutzer-Admin-Funktionen in einer WPF-App, die ich gerade schreibe, und möchte sie für den Endbenutzer etwas intuitiver gestalten.
Ich würde gerne in der Lage sein, die Rollenliste, zu der ein bestimmter Benutzer gehört, einfach zu bearbeiten. Im Moment wird das Gitter als Ergebnis der Bindung an List<ApplicationUser>
ApplicationUser
ist meine eigene Klasse definiert als:
Wie zu sehen ist, befinden sich die Rollen, in denen sich der Benutzer befindet, in einem List<Role>
. Role
ist meine eigene Klasse definiert als:
Das folgende Mockup stellt den aktuellen Zustand dar, in dem ich die Rollen nur als Liste erhalte und durch die Verwendung eines Konverters nur die Rollen als neue Zeilen getrennte Strings in der Gridview anzeigt
Aber das möchte ich erreichen, um die Mitgliedschaft in verschiedenen Gruppen einfacher zu machen.
Nun, da ich darüber nachdenke, muss ich wahrscheinlich die Definition von Role so ändern, dass sie eine IsMember-Eigenschaft enthält, um die Bindung an die Checkbox zu erleichtern, aber wenn jemand einen besseren Weg hat, werde ich das auch begrüßen. Ich kann den Join-Typ im Sproc ändern, damit ich alle Rollen mit einer Abfrage über einen bestimmten Benutzer zurückerhalte und die IsMember-Eigenschaft entsprechend fülle.
Danke für Ihre Zeit!
Hier ist ein kurzes Stück Code, das ich ausgetüftelt habe, um Sie zu beginnen. Ich habe angenommen, dass Sie die Eigenschaft IsMember
der Klasse Role
hydratisieren können, wenn Sie den Anwendungsbenutzer erstellen. Ich habe den einfachsten Weg gewählt, indem ich alle Rollen in allen Benutzern hatte ( enum flags
wäre am besten gewesen, aber wenn ich Ihre Daten angegeben habe, bin ich mir nicht sicher, ob das eine Option ohne ein paar Installationen ist). Ich habe minimale Spalten verwendet, um die Idee zu vermitteln. Wenn Sie mindestens INotifyPropertyChanged
für "Roles" implementieren, können Sie sich mit der Benachrichtigung verbinden und sie in der Datenbank speichern, wenn sich die Kontrollkästchen am Frontend ändern.
Haupt-Xaml
%Vor%Daten-Xaml
%Vor%Klassendefinitionen
%Vor%Ergebnis
Wenn in der Spalte "Rollen" immer die gleiche Liste mit Rollen angezeigt wird, können Sie einen ListView ganz einfach an die Liste aller Rollen mit einer ItemTemplate binden, die aus einer CheckBox und einem TextBlock erstellt wird.
Anschließend können Sie die IsChecked-Eigenschaft der CheckBox ganz einfach an die Benutzerrollen binden und einen Konverter verwenden, der True zurückgibt, wenn sich die Rolle in der Benutzerrollenliste befindet.
Tags und Links wpf c# wpfdatagrid