如何在DataGrid列绑定中使用自定义ComboBoxItem-s(带有图像的文本)?

时间:2019-05-19 07:47:45

标签: c# wpf datagridcomboboxcolumn

在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属性,但是我不知道什么是最正确的方法这个。

0 个答案:

没有答案