在DataGrid中,我有一个DataGridComboBoxColumn,我想显示两个硬编码的ComboBoxItem,它们每个都有一个文本和一个图标,但是我不知道如何使DataGridComboBoxColumn.TextBinding工作。下面的新代码显示为带有空下拉列表s的空ComboBox-es。
在XAML资源中:
<DataTemplate DataType="{x:Type local:ClockType}">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding DataContext.ImagePath, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ComboBoxItem}}" Width="16" VerticalAlignment="Center"></Image>
<TextBlock VerticalAlignment="Center" Text="{Binding DataContext.Name, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ComboBoxItem}}"></TextBlock>
</StackPanel>
</DataTemplate>
在GUI标记中:
<DataGridComboBoxColumn Header="Type"
ItemsSource="{Binding ElementName=MyClockDataGrid, Path=ClockTypes}"
SelectedValueBinding="{Binding Name}">
</DataGridComboBoxColumn>
在后面的代码中:
ClockTypes = new ObservableCollection<ClockType>();
ClockTypes.Add(new ClockType()
{
Name = "Timer",
ImagePath = "/Resources/timers filter (clepsidra 4).ico"
});
ClockTypes.Add(new ClockType()
{
Name = "Alarm",
ImagePath = "/Resources/alarms filter (alarm clock 5).ico"
});
<DataGridComboBoxColumn Header="Type"
TextBinding="{Binding ClockType}">
<DataGridComboBoxColumn.ItemsSource>
<x:Array Type="{x:Type sys:String}">
<sys:String>Timer</sys:String>
<sys:String>Alarm</sys:String>
</x:Array>
</DataGridComboBoxColumn.ItemsSource>
</DataGridComboBoxColumn>
ClockType是枚举类型的ViewModel属性。
我尝试了上面的新代码,但ComboBox-es为空。我不知道下一步该怎么做。对于2个硬编码的ComboBoxItem-s,我想将它们直接放在列标记中。
我考虑过在两个ComboBox-es的每一个上使用DataGridTemplateColumn或Tag
,或者使用DataGridComboBoxColumn的SelectedValueBinding或SelectedItemBinding属性,但是我不知道什么是最正确的方法这个。