如何将Dictionary <enum,bool>双向绑定到WPF中的ListView列?

Joa*_*nge 5 .net c# data-binding wpf listbox

我有这样的类型:

public class EffectViewModel
{
    public string Name { get; set; }
    public string Category { get; set; }

    public Dictionary<ShaderType, bool> ShaderSupport { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

.Name并且.Category已经绑定到2个单独的列,但ShaderSupport字典不是.

我无法弄清楚如何将字典双向绑定到每个单独的列ShaderType.我不知道这些列数是否可以动态完成,但我在xaml中对它们进行了硬编码,如下所示:

<GridViewColumn Width="60" Header="GPU" >
<GridViewColumn Width="60" Header="Pixel" >
...
Run Code Online (Sandbox Code Playgroud)

但现在卡在绑定部分.有任何想法吗?

Sno*_*ear 3

<ItemsControl Grid.IsSharedSizeScope="True" ItemsSource="{Binding AllEffects}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" SharedSizeGroup="NameColumn" />
                        <ColumnDefinition Width="Auto" SharedSizeGroup="CategoryColumn" />
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="{Binding Name}" />
                    <TextBlock Text="{Binding Category}" Grid.Column="1" />
                </Grid>
                <ItemsControl ItemsSource="{Binding ShaderSupport}">
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <StackPanel Orientation="Horizontal" />
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="60" />
                                </Grid.ColumnDefinitions>
                                <CheckBox Grid.Row="1" IsChecked="{Binding Value, Mode=OneWay}" />
                            </Grid>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)

这将创建一个没有标题的网格。为了使复选框绑定在TwoWay模式中,请用您自己的类型替换字典,KeyValuePair不允许写入Value属性,因此不能用于绑定TwoWay

请注意,每个EffectVM着色器的字典中的所有着色器都应按相同的顺序排列。