1

Silverlight 3 を使用してアプリケーションを開発しています。私のアプリには、DataGridTemplateColumns を持つ DataGrid (「PART_datagrid」という名前) があるレイアウト グリッド (「LayoutGrid」という名前) があります。LayoutGrid には、Ladders リストがプロパティとして存在する DataContext が設定されます。このラダー リストは、PART_datagrid の ItemsSource として設定されます。

<Grid x:Name="LayoutRoot">
   <DataGrid x:Name="PART_datagrid" ItemsSource="{Binding Ladders}">
      ...
      <DataGridTemplateColumn>
         <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
               <Button Name="DeleteLadder" Click.Command="{Binding ElementName=LayoutRoot, Path=DataContext.DeleteLadderCommand}" />

DataGridTemplateColumns の 1 つに、LayoutGrid の DataContext に存在する Command を呼び出すボタンがあります。そこで、次のように DataTemplate ボタンで Element-To-Element バインディングを試しました

<Button Name="DeleteLadder" Click.Command="{Binding ElementName=LayoutRoot, Path=DataContext.DeleteLadderCommand}" />

しかし、これはうまくいかないようです。私が達成したいのは、コマンドを使用して親 DataContext レベルで DataGrid 行の削除イベントを処理することです。

誰かがこれをどのように進めるかを提案できますか?

前もって感謝します...

4

1 に答える 1

2

問題は、各行がデータグリッドソースを「新しい」データコンテキストのようなものとして使用しているようです。したがって、各行からグリッドの外に出て、階層の上位にあるものをポイントして、親のデータコンテキストを取得する必要があります。これらの解決策が役立つ場合があります。同じ問題に遭遇したとき、解決策2がうまくいきました。

ロケータを使用した解決策 1

この投稿を参照してください: Silverlight DataGrid.Celltemplate Binding to ViewModel

解決策 2 上部でリソースの定義を使用し、そのデータコンテキストに接続します。

<UserControl.Resources>
    <ContentControl x:Key="cc1" Content="{Binding}" />
</UserControl.Resources>

次に、データグリッド内でこのようなものを使用します

Command="{Binding Source={StaticResource cc1}, Path=Content.DeleteLadderCommand}"

幸運を

于 2011-09-13T18:31:59.260 に答える