我正在尝试绑定 ComboBoxItem 的属性 IsSelected 以显示正确的图标,如果选择了项目,则应显示红色图标,否则打开列表的其余部分为灰色。我如何尝试实现该功能的方式如下面的代码所示。
<ComboBox
ItemsSource="{Binding Icons}"
SelectedItem="{Binding SelectedIcon, Mode=TwoWay}"
Style="{ThemeResource DefaultComboBoxStyle}"
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image
Width="20"
Height="20"
Source="{Binding IconId, Mode=TwoWay, Converter={StaticResource IconConverter}, ConverterParameter={StaticResource True}}"
Visibility="{Binding Path=IsSelected,RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource BoolToVisibilityConverter}}" />
<Image
Width="20"
Height="20"
Source="{Binding IconId, Mode=TwoWay, Converter={StaticResource IconConverter}}"
Visibility="{{Binding Path=IsSelected,RelativeSource={RelativeSource Mode=TemplatedParent} Converter={StaticResource BoolToVisibilityInverted}}" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
两个图像转换器的项目图标 ID 相同,将根据传递的参数返回正确的图像链接。我尝试获取父数据上下文并尝试使用comboBoxItem (SelectorItem) 的IsSelected 属性,但它不起作用。
我不想在我迭代的 ViewModel 中添加 IsSlected 属性,我假设存在一些语法,但我找不到它。我只想获取 IsSelected 属性的值并绑定到 xaml 中,而无需更改 ViewModel 中的代码。
类似下面代码中的东西是实现的,但是是硬编码的元素。根据 ComboBoxItem 的 IsSelected 项目属性,显示正确的图标。我想要使用 ItemsSource 和 DataTemplate 获得相同的功能。
<ComboBox
SelectedIndex="{Binding IconType, Mode=TwoWay, Converter={StaticResource IconTypeIndexToIconConverter}}"
Style="{ThemeResource DefaultComboBoxStyle}">
<ComboBoxItem x:Name="SwitchIcon">
<StackPanel Orientation="Horizontal">
<Image
Source="{Binding Source=1, Converter={StaticResource IconConverter}}"
Style="{ThemeResource DeviceTypeImageBlockStyle}"
Visibility="{Binding IsSelected, ElementName=SwitchIcon, Converter={StaticResource BoolToVisibilityInverted}}" />
<Image
Source="{Binding Source=1, Converter={StaticResource IconConverter}, ConverterParameter={StaticResource True}}"
Style="{ThemeResource DeviceTypeImageBlockStyle}"
Visibility="{Binding IsSelected, ElementName=SwitchIcon, Converter={StaticResource BoolToVisibilityConverter}}" />
</StackPanel>
</ComboBoxItem>
<ComboBoxItem x:Name="LightDimmingIcon">
<StackPanel Orientation="Horizontal">
<Image
Source="{Binding Source=2, Converter={StaticResource IconConverter}}"
Style="{ThemeResource DeviceTypeImageBlockStyle}"
Visibility="{Binding IsSelected, ElementName=LightDimmingIcon, Converter={StaticResource BoolToVisibilityInverted}}" />
<Image
Source="{Binding Source=2, Converter={StaticResource IconConverter}, ConverterParameter={StaticResource True}}"
Style="{ThemeResource DeviceTypeImageBlockStyle}"
Visibility="{Binding IsSelected, ElementName=LightDimmingIcon, Converter={StaticResource BoolToVisibilityConverter}}" />
</StackPanel>
</ComboBoxItem>
</ComboBox>
有任何想法吗?解决方案?