2
我有一個意外的問題綁定到枚舉列表。綁定默默失敗,我無法解釋爲什麼。WPF:無法綁定DataGrid枚舉列表
該代碼應該做的是創建一個DataGrid,其中單元格模板作爲組合框填充了枚舉選項,並將所選項目設置爲列表元素。
這種方法適用於其他地方,對於具有enum元素作爲其.Value屬性的可觀察集合。它似乎只是不喜歡枚舉元素的可觀察集合。
要明確,這裏有一些例子類:
public enum EquipmentEnum { EquipmentA, EquipmentB, EquipmentC }
public class EquipmentClass { public EquipmentEnum Value { get; set; } }
這工作:
<DataGrid AutoGenerateColumns="False"
ItemsSource="{Binding equipmentClassList}"> <!-- ObservableCollection<EquipmentClass> -->
<DataGrid.Columns>
<DataGridTemplateColumn Header="Equipment Used" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Source={local:Enumeration {x:Type EquipmentEnum}}}"
SelectedIndex="{Binding Path=Value Converter={StaticResource convertEnumValueToIndex}, Mode=TwoWay}"
DisplayMemberPath="Description"
IsEditable="True" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
這不工作:
<DataGrid AutoGenerateColumns="False"
ItemsSource="{Binding equipmentEnumList}"> <!-- ObservableCollection<EquipmentEnum> -->
<DataGrid.Columns>
<DataGridTemplateColumn Header="Equipment Used" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Source={local:Enumeration {x:Type EquipmentEnum}}}"
SelectedIndex="{Binding Converter={StaticResource convertEnumValueToIndex}, Mode=TwoWay}"
DisplayMemberPath="Description"
IsEditable="True" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
只是一些注意事項:
local:Enumeration
是標記擴展它只是提供了枚舉元素列表的描述。
在此先感謝。
您可能沒有在convertEnumValueToIndex轉換器中指定convertback方法。 SelectedITem屬性優於SelectedIndex屬性。 – vorrtex 2011-03-23 22:46:42
感謝您的回覆。轉換器似乎不是問題 - 兩個方向都實現了,但是對於這個特殊的組合框沒有被調用。正如我所說,這個確切的結構在其他地方有效,我使用了完全相同的轉換器類實例。 – dythim 2011-03-23 23:37:41
無論如何,問題出在SelectedIndex及其綁定上。它綁定到數據網格所有列的單個對象。第一個xaml有什麼問題? – vorrtex 2011-03-24 09:30:38