0

私は MVVM または PRISM ベースのモデルを使用していません。DataGrid DataTemplate 内で、DataGrid と同じレベルにあるコントロールにバインドしようとしています。これを行うと、null が返されます。

2 つの質問:

  1. レイアウトルートとは?それを参照すると (この場合はグリッド)、オブジェクトが返されます。XAML で LayoutRoot をキャンバスに変更すると、null が返されます。

  2. DataGrid 列の DataTemplate 内の XAML で Canvas にバインドするにはどうすればよいですか?

次の XAML があります: (長さのためにトリミングされています)

<Grid x:Name="LayoutRoot" Background="#F7F7F7">
    <Border>
        <Canvas x:Name="LayoutCanvas">
            <!-- A lot of Xaml -->
        </Canvas>
    </Border>
</Grid>

Canvas 内には、次の DataGrid があります。

<sdk:DataGrid x:Name="dgOrderContents" AutoGenerateColumns="False">
    <sdk:DataGrid.Columns>
        <sdk:DataGridTemplateColumn Header="Thumb">
            <sdk:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ucp:PhotoComponentForDataGrid Source="{Binding PhotoUrl}" PopupTarget="{Binding ElementName='LayoutCanvas' }" Width="60" />
                </DataTemplate>
            </sdk:DataGridTemplateColumn.CellTemplate>
        </sdk:DataGridTemplateColumn
    </sdk:DataGrid.Columns>
</sdk:DataGrid>

私の問題は、「LayoutCanvas」を使用してバインドしようとすると、値が null になり、エラーが発生することです。「LayoutRoot」にバインドすると機能しますが、UserControl 内にある FloatableWindow コントロールは Canvas に依存しているため、Canvas が必要です。

ヘルプや提案をお寄せいただきありがとうございます。

4

1 に答える 1

0

MVVMまたはPRISMモデルを使用していないため、バインディングを機能させることができなかった可能性があります。しかし、DataGridのLoadingRowイベントを使用して機能させることができました。

private void dgOrderContents_LoadingRow(object sender, DataGridRowEventArgs e)
{
    foreach (DataGridColumn col in dgOrderContents.Columns)
    {
        if (col.Header.ToString() == "Thumb")
        {
            PhotoComponentForDataGrid pcdControl = (PhotoComponentForDataGrid)col.GetCellContent(e.Row);
            pcdControl.PopupTarget= this.LayoutCanvas;
        }
    }
}

これにより、カスタムユーザーコントロールからLayoutCanvasコントロールを参照できるようになりました。

于 2013-01-23T14:20:37.840 に答える