带有CheckBox的ListBox基于枚举

时间:2016-06-10 12:27:19

标签: c# wpf xaml checkbox listbox

我想创建带有基于Enum的复选框的列表框。我的枚举包含标志。现在,如果某些checbox变为chcecked / unchecked,我想添加/ sub与该复选框关联的值。 ViewModel包含应存储标志当前值总和的属性。 如何订阅已选中/未选中的事件以及如何获取该复选框包含的值。

以下是代码:

<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>

2 个答案:

答案 0 :(得分:2)

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

将所有枚举类型添加到列表itemsource

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

勾选复选框:

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;
 }

答案 1 :(得分:0)

使用与ViewModel属性的双向绑定。将该属性绑定到CheckBox。