2016-06-10 5 views
1

Ich möchte Listbox mit Checkboxen basierend auf Enum erstellen. Meine Enum enthält Flags. Jetzt, wenn einige checkbox checked/unchecked, möchte ich hinzufügen/Sub-Wert mit diesem Kontrollkästchen verknüpft. ViewModel enthält eine Eigenschaft, die den aktuellen Wert der Summe der Flags speichern soll. Wie abonniere ich das Checked/Unchecked Event und wie bekomme ich den Wert, den das Checkbox enthält. HierListBox mit CheckBoxen basierend auf enum

ist der Code:

<Page.DataContext> 
    <self:NewUserViewModel/> 
</Page.DataContext> 
<Page.Resources> 
    <ObjectDataProvider x:Key="permEnum" MethodName="GetValues" ObjectType="{x:Type sys:Enum}"> 
     <ObjectDataProvider.MethodParameters> 
      <x:Type TypeName="enums:Permissions"/> 
     </ObjectDataProvider.MethodParameters> 
    </ObjectDataProvider> 
</Page.Resources> 

<Grid Background="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"> 
<ListBox x:Name="PermissionLbox" ItemsSource="{Binding Source={StaticResource permEnum}}" Height="75" Margin="10,117,10,0" VerticalAlignment="Top"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
       <CheckBox Content="{Binding .}"></CheckBox> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
</Grid> 

Antwort

2
[Flags] 
public enum WeekDays 
{ 
    Sunday = 1, 
    Monday = 2, 
    Tuesday = 4, 
    Wednesday = 8, 
    Thursday = 16, 
    Friday = 32, 
    Saturday = 64 
}` 

hinzufügen alle Aufzählungstypen zur Liste ItemSource

list.ItemsSource = Enum.GetValues(typeof(WeekDays)); 

prüfen geprüft Checkbox:

private void CheckBox_Checked(object sender, RoutedEventArgs e) 
{ 
    var checkBox = (CheckBox)sender; 
    var dc = checkBox.DataContext; 
    var actualValue = (WeekDays)Enum.Parse(typeof(WeekDays), dc.ToString()); 
    int Value += (int)actualValue; 
} 
0

Verwenden Zwei-Wege-Bindung mit das Eigentum Ihrer ViewModel. Binden Sie diese Eigenschaft an die CheckBox.

+0

Aber wenn ich zwei Checkboxen einstelle, dann wird nur eine Flagge in der Property sein. stattdessen möchte ich eine Summe von ihnen speichern. – igorr