2017-12-20 6 views
0

Ich schreibe eine Desktopanwendung, die einige Benutzerberechtigungsverwaltung enthält, und daher ein Segment zum Verwalten aller Benutzerberechtigungen erstellen.So erstellen Sie eine Gruppe von Steuerelementen auf der Grundlage von Eigenschaften einer Modellklasse

Bevor ich anfange, alle verschiedenen Arten von Berechtigungen in die Benutzeroberfläche zu kodieren, habe ich mich gefragt, ob es möglich ist, WPF dies dynamisch für mich tun zu lassen.

Um genauer zu sein, habe ich ein Modell mit dem Benutzer und seine Berechtigungen (jeder Benutzer eine Rolle), die wie folgt aussieht:

public class Role 
{ 
    public enum Permission 
    { 
     None, 
     Read, 
     Write 
    }; 

    public int id; 
    public string name; 
    public bool isAdmin; 
    public Permission Usermanagement; 
    public Permission Appointments; 
    public Permission Events; 

und für jede Berechtigung in dieser Klasse mag ich WPF erstellen eine Vorlage mit dem Namen und einem Kombinationsfeld, um die Art der Berechtigung auszuwählen. Meine erste Schätzung war, eine ListView/ListBox mit einer Vorlage zu verwenden (dieser Teil ist nicht das Problem).

Meine Frage ist, wie bekomme ich die Liste der Berechtigungen als eine Quellenliste für meine Vorlage, und danach, wie Sie das reale Objekt an sie binden, damit die richtige Berechtigung aktualisiert wird.

Dies ist mehr eine Frage über die Möglichkeit, ich könnte nur meine Berechtigungen hart codieren und sie einzeln binden.

Antwort

1

verwenden Sie können eine Sammlung von Namen/Erlaubnis Paare wie folgt aus:

public class NamedPermission 
{ 
    public string Name { get; set; } 
    public Permission Permission { get; set; } 
} 

public class Role 
{ 
    ... 

    public List<NamedPermission> Permissions { get; } = new List<NamedPermission> 
    { 
     new NamedPermission { Name = "Usermanagement" }, 
     new NamedPermission { Name = "Appointments" }, 
     new NamedPermission { Name = "Events" } 
    }; 
} 

und binden ein Items wie folgt aus:

<ItemsControl ItemsSource="{Binding Permissions}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding Name}" Width="100" VerticalAlignment="Center"/> 
       <ComboBox SelectedValuePath="Content" SelectedValue="{Binding Permission}"> 
        <ComboBoxItem Content="None"/> 
        <ComboBoxItem Content="Read"/> 
        <ComboBoxItem Content="Write"/> 
       </ComboBox> 
      </StackPanel> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
Verwandte Themen