1

User テーブルがあり、Book テーブルからこのテーブルの外部キーを取得しています。FK は ProxyResponsibleUser_ID です。DataGrid で DataGridTextColumn を使用すると何でも問題ありませんが、DataGridTemplateColumn を使用して、対応するユーザーの User テーブルから ProxyResponsibleUser_ID の FullName 列を表示したいと考えています。DataGridTemplateColumn には Binding プロパティがないため、エラーが発生します。

では、DataGridTemplateColumn のどのプロパティによって ProxyResponsibleUser_ID をバインドするのでしょうか? 前もって感謝します。

<DataGridTextColumn x:Name="securityConfigurationNameColumn" Binding="{Binding Path=SecurityConfigurationName}" Header="Security Configuration Name" Width="*" />
<DataGridTemplateColumn x:Name="proxyResponsibleUser_IDColumn"   Binding="{Binding Path=ProxyResponsibleUser_ID}" Header="Proxy Responsible User ID" Width="*" >
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate DataType="{x:Type domain:User}">
                        <TextBlock Text="{Binding FullName}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>
4

2 に答える 2

4

私はかなり長い間この質問に苦労してきました.多くの無駄な検索の後、私は許容できる代替案を思いつきました.

これを探している他の人へ: DataGridBoundColumn のカスタム実装を作成してみてください。オーバーライドする必要があるのは、GenerateElement と GenerateEditingElement の 2 つのメソッドだけです。

例:

protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem)
{
    Label element = new Label();
    element.SetBinding(Label.ContentProperty, Binding);

    return element;
}

使用法:

<DataGrid>
    <DataGrid.Columns>
        <DataGridCustomColumn Binding="{Binding SomeProperty}" />
        <DataGridCustomColumn Binding="{Binding OtherProperty}" />
    </DataGrid.Columns>
</DataGrid>

当初はテンプレートを使用するつもりでしたが、必要なものがかなり単純なので、コード ビハインドで要素を作成することにしました。ただし、適切な DependencyProperty 登録が与えられた場合、これを DataTemplates で動作するように適応できない理由はわかりません。

于 2012-07-30T22:06:51.723 に答える
0

あなたが何をしたいのか正確にはわかりませんが、Binding は、既に行ったのとまったく同じように TextBlock で行う必要があります。したがって、DataGridTemplateColumn-Tag の Binding は不要です。列がレコードの ID を知る必要はありません。

TextBox コントロールで ID を使用できるようにする場合 (DataContext を介してこのプロパティに直接アクセスできるため、通常は必要ありません)、たとえば Tag プロパティをバインドすることでこれを行うことができます。

<TextBlock Text="{Binding FullName}" Tag="{Binding ProxyResponsibleUser_ID}"/> 

ところで、EditTemplate で TextBlock を宣言しました。たぶん、TextBox が必要です。または、ユーザーが ID を変更できるようにしますか? このような場合はコメントしてください。

お役に立てれば。

于 2010-09-01T11:08:16.550 に答える