如何在Image控件中使用IMultiValueConverter和单独的列表?

时间:2013-12-16 08:40:30

标签: c# wpf

我在ValueToVisibilityConverter : IMultiValueConverter中使用ControlTemplateImageComboBoxComboBox绑定到字符串列表。 ValueToVisibilityConverter已应用于MultiBinding ComboBox属性SelectedTextText的图片上。

我想检查列表中是否存在SelectedText / Text,如果没有,则显示图像。 它与ComboBox绑定的列表工作正常,但我必须检查另一个列表中的值。谁能让我怎么做?

我的代码是:

<ControlTemplate x:Key="ChannelGroupControlTemplate" TargetType="{x:Type igEditors:XamTextEditor}">
    <Microsoft_Windows_Themes:ListBoxChrome x:Name="BorderContainer">
      <Grid>
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="Auto"/>
          <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Image Grid.Column="0" Source="/Sample;component/Resources/Images/ErrorProvider.png" ToolTip="{l:Localize This item is not found in the system}" HorizontalAlignment="Left"
               Focusable="False" VerticalAlignment="Center">
          <Image.Visibility>
            <MultiBinding Converter="{StaticResource ValueToVisibilityConverter}" >
              <Binding ElementName="comboBox" Path="SelectedValue"/>
              <Binding ElementName="comboBox" Path="Text"/>
            </MultiBinding>
          </Image.Visibility>
        </Image>
        <ComboBox Name="comboBox"
                      IsEditable="True"
                      ItemsSource="{Binding Source={x:Static BasicEditors:DSTChannelGroupViewModel.TypeValues}}"
                                               Grid.Column="1" Margin="0" Padding="1" BorderThickness="0" Background="Transparent"/>
      </Grid>
    </Microsoft_Windows_Themes:ListBoxChrome>
  </ControlTemplate>

1 个答案:

答案 0 :(得分:0)

这里不需要多转换器,你应该只有值。

  1. 你可以绑定到SelectedValue并检查转换器是否值为null - null。

  2. 您可以在SelectedIndex属性上使用Trigger,然后将图像设置为可见。

  3. 这是第二种方式:

    <Image x:Name="image" Grid.Column="0" Source="/Avl.OneParam.UI.Core;component/Resources/Images/ErrorProvider.png" 
           ToolTip="{l:Localize This item is not found in the system}" HorizontalAlignment="Left"
           Focusable="False" VerticalAlignment="Center" Visibility="Hidden" />
    

    并将此触发器添加到ControlTemplate:

    <ControlTemplate.Triggers>
        <DataTrigger Binding="{Binding ElementName=comboBox, Path=SelectedIndex}" Value="-1">
            <Setter TargetName="image" Property="Visibility" Value="Visible" />
        </DataTrigger>
    </ControlTemplate.Triggers>