将模板化ListBox中的图像绑定到ViewModel属性

时间:2012-01-12 05:17:25

标签: silverlight data-binding mvvm datatemplate

TL; DR - 我有绑定错误。疲惫的眼睛会错过任何事情。

我使用ListBox作为容器实现了一个多选CheckBox列表。现在,在列表中的每个复选框旁边,我想显示一个可见性绑定到ViewModel属性的图像,但是我很难做到这一点。

我的风格是:

<Grid.Resources>
            <Style x:Key="ListBoxCheckStyle" TargetType="ListBox">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ListBox">
                            <ItemsPresenter HorizontalAlignment="Left" VerticalAlignment="Top"/>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
            <ItemsPanelTemplate x:Key="ListBoxCheckStyleItemsPanelTemplate">
                <StackPanel />
            </ItemsPanelTemplate>
            <Style x:Key="ListBoxItemCheckStyle" TargetType="ListBoxItem">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ListBoxItem">
                            <StackPanel Orientation="Horizontal">                                
                                <ChimeControls:CheckBox 
                                        Content="{TemplateBinding Content}" 
                                        ContentTemplate="{TemplateBinding ContentTemplate}"
                                        Margin="0,0,10,0"
                                        IsChecked="{Binding IsSelected, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"/>
                                <Image 
                                    Width="16" 
                                    Height="16" 
                                    VerticalAlignment="Center" 
                                    Source="{StaticResource OccurredStatusTypeImageSource}" 
                                    Visibility="{Binding HasConsentCondition, Converter={StaticResource BoolToVisibilityConverter}, FallbackValue=Collapsed}" 
                                    HorizontalAlignment="Right" 
                                    Margin="10,0,10,0" />
                            </StackPanel>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Grid.Resources>

我的列表框定义为:

<ListBox 
                                x:Name="objectivesListBox" 
                                HorizontalAlignment="Left" 
                                VerticalAlignment="Top"
                                Style="{StaticResource ListBoxCheckStyle}" 
                                ItemsPanel="{StaticResource ListBoxCheckStyleItemsPanelTemplate}" 
                                ItemContainerStyle="{StaticResource ListBoxItemCheckStyle}"
                                ItemsSource="{Binding ObjectivesList}"
                                DisplayMemberPath="mgt_plan_obj_name"
                                AttachedProperties:ListBoxSelectedItems.Items="{Binding SelectedObjectives, Mode=TwoWay}"
                                SelectionMode="Multiple"/>

我的图像永远不会显示,并且永远不会调用Visibility绑定的属性的getter。我错过了什么?

1 个答案:

答案 0 :(得分:1)

正如nemesv建议的那样,我再次检查了输出窗口,并且出现了绑定错误。