SL4.ElementName绑定在DataTemplate中不起作用

Ana*_*uza 4 silverlight xaml binding datagrid datatemplate

DataTemplate还有另一个令人头痛的问题.


描述: 使用Silverlight 4,Mvvm等(用于Silverlight LOB应用程序的标准开发工具集).

实体列表成功绑定到DataGrid.一个属性(可空的bool BoolValue)负责实体行为,并在datagrid中显示图片,点击这将导致更改LayoutRoot元素中某些控件的可见性.

问题: 问题在于,不幸或幸运的是,ElementName绑定内部DataTemplate没有看到除此之外的其他元素,这些元素放在此模板中.

代码示例:

<navigation:DataGridTemplateColumn Width="40"
                              CanUserReorder="True"
                              CanUserSort="False">
     <navigation:DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
             <Border Background="GhostWhite">
             <Grid>
              <Image x:Name="ImageWithTrigger"
                     Grid.Column="1"
                     Margin="10,4,0,0"
                     HorizontalAlignment="Left"
                     VerticalAlignment="Center"
                     Cursor="Hand"
                     Source="images/someImage.png"
                     Stretch="None"
                     Visibility={Binding BoolValue, Converter={StaticResource boolToVisibilityConverter} }>
               <i.Interaction.Triggers>
                 <i:EventTrigger EventName="MouseLeftButtonDown">
                     <AttachedBehaviors:TrickyBehavior FrameworkElementToHide="{Binding ElementName=FirstControlOutside}" 
                                                       FrameworkElementToShow="{Binding ElementName=SecoundControlOutside}"/>
                 </i:EventTrigger>
              </i:Interaction.Triggers>
            </Grid>
            </Border>
          </DataTemplate>
     </navigation:DataGridTemplateColumn.CellTemplate>
</navigation:DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,FrameworkElementToHide和FrameworkElementToShow始终为null.

互联网上有很多非常类似的问题和解决方案,但我没有找到解决这个问题的任何简单而优雅的方法.

Jus*_* XL 6

请在这篇文章中看看我的答案.

ElementName绑定无法正常工作DataGrid.您需要一个代理来解决这个问题.但是,ElementName绑定确实适用于正常DataTemplates,例如ItemTemplatea ListBox等.