Существует еще одна головная боль с DataTemplate.
Описание:
Использование Silverlight 4, Mvvm и т. Д. (Стандартный набор инструментов разработчика для LOB-приложений Silverlight).
Список объектов успешно привязан к DataGrid
. Одно свойство (nullable bool BoolValue) отвечает за поведение сущности и представлено в сетке данных с рисунком, щелкнув по которому, можно изменить видимость некоторых элементов управления в элементе 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>
В приведенном выше примере FrameworkElementToHide и FrameworkElementToShow всегда равны нулю.
В интернете очень много похожих проблем и решений, но я не нашел простого и элегантного способа решения этой проблемы.