DataTemplateで別の頭痛があります。SL4。 ElementNameによるバインドがDataTemplate内で機能していません
説明: シルバー4、MVVM、等(SilverlightのLOBアプリケーションのための開発ツールのスタンダールセット)を使用。
エンティティのリストは、DataGrid
に結びついています。 1つのプロパティ(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'を使って私のケースでうまくいくようです。 –