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>
在上面的示例中,FrameworkElementToHide和FrameworkElementToShow始终为null。
互联网上有很多非常类似的问题和解决方案,但我没有找到解决这个问题的任何简单而优雅的方法。
答案 0 :(得分:6)
请在post中查看我的回答。
ElementName绑定在DataGrid
内无效。您需要一个代理来解决这个问题。但是,ElementName绑定适用于普通DataTemplates
,例如ItemTemplate
的{{1}}等等。
答案 1 :(得分:1)
[这应该是评论,但我超出了允许的字符数]
我认为有两种方法可以解决这个问题:
ContentControl
;添加将在两个状态之间切换的IsShowing属性(bool);在新控件的控件模板中,制作用于显示和隐藏内容的所需动画。 两种方式都不是那么优雅,但那是Silverlight ......; - )