我试图绑定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,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 item属性显示正确的图标。我希望使用ItemsSource和DataTemplate具有相同的功能。
<ComboBox
SelectedIndex="{Binding IconType,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,ConverterParameter={StaticResource True}}"
Style="{ThemeResource DeviceTypeImageBlockStyle}"
Visibility="{Binding IsSelected,Converter={StaticResource BoolToVisibilityConverter}}" />
</StackPanel>
</ComboBoxItem>
<ComboBoxItem x:Name="LightDimmingIcon">
<StackPanel Orientation="Horizontal">
<Image
Source="{Binding Source=2,ElementName=LightDimmingIcon,Converter={StaticResource BoolToVisibilityInverted}}" />
<Image
Source="{Binding Source=2,Converter={StaticResource BoolToVisibilityConverter}}" />
</StackPanel>
</ComboBoxItem>
</ComboBox>
有什么想法吗?解决方案?