DataTemplate에 다른 두통이 있습니다.SL4. ElementName에 의한 바인딩이 DataTemplate 내에서 작동하지 않습니다.
설명 : 실버 라이트 4, MVVM 등 (실버 LOB 애플리케이션을위한 개발자 도구의 standart 세트)를 사용.
엔티티 목록은 DataGrid
에 성공적으로 바인딩됩니다. 하나의 속성 (nullable bool BoolValue)은 엔티티 동작을 담당하며 그림이있는 DataGrid에 표시됩니다. 클릭하면 LayoutRoot 요소 내의 일부 컨트롤의 가시성이 변경됩니다.
문제점 : 문제는 DataTemplate
내에 바인딩이 템플릿 내에 배치 된 것을 제외하고 다른 요소를 참조하지 않는 ElementName
불행히도 또는 다행이다.
코드 샘플 : 위의 예에서
<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입니다.
인터넷에는 꽤 비슷한 문제와 해결책이 많이 있지만이 문제를 해결하는 데 직접적이고 우아한 방법을 찾지 못했습니다.
'DataGrid' 템플릿에서'ElementName'으로 바인드 할 방법이 없다는 것을 의미합니까? –
아니, 난 그렇게 생각하지 않아 ... –
Dan Wahlin의 예에서 'DataTemplate'에서 ViewModel에 액세스하는 유일한 방법을 찾았지만'StaticResource'를 사용하여 제 경우에는 제대로 작동하는 것 같습니다. –