![](/img/trans.png)
[英]How to bind a Dictionary<enum,bool> property to a GridViewColumn?
[英]How to 2-way bind a Dictionary<enum, bool> to a ListView column in WPF?
我有這樣的類型:
public class EffectViewModel
{
public string Name { get; set; }
public string Category { get; set; }
public Dictionary<ShaderType, bool> ShaderSupport { get; set; }
}
.Name
和.Category
已綁定到2個單獨的列,但ShaderSupport
字典不是。
我無法弄清楚如何將字典雙向綁定到每個ShaderType
的單獨列。 我不知道這些列數是否可以動態完成,但我在xaml中對它們進行了硬編碼,如下所示:
<GridViewColumn Width="60" Header="GPU" >
<GridViewColumn Width="60" Header="Pixel" >
...
但現在卡在綁定部分。 有任何想法嗎?
<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>
這將創建一個沒有標題的網格。 為了在TwoWay
模式下使用自己的類型替換字典, KeyValuePair
不允許寫入Value
屬性,因此不能用於TwoWay
綁定。
請注意,每個EffectVM
應該以相同的順序在字典中包含所有着色器。
由於字典是IEnumerable,您可以綁定鍵和值。 那說順序並不總是與字典一致,所以我會讓我的視圖模型創建一個包裝器observablecollection
<ListView ItemsSource="{Binding ShaderSupport}">
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn Width="60" Header="Key" DisplayMemberBinding="{Binding Key}" />
<GridViewColumn Width="60" Header="Value" DisplayMemberBinding="{Binding Value}" />
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.