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)
但现在卡在绑定部分.有任何想法吗?
<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着色器的字典中的所有着色器都应按相同的顺序排列。
| 归档时间: |
|
| 查看次数: |
1962 次 |
| 最近记录: |