21

特定の に関連付けられたプロパティの名前を取得しようとしているDataGridColumnので、それに基づいていくつかのことを実行できます。この関数は、ユーザーが列のヘッダーのコンテキスト メニュー項目をクリックすると呼び出されます...

これは、バインドされているため、 のようなすぐに使用できる既製の列タイプでは問題ありませんDataGridTextColumnが、問題は、私の列の一部がDataGridTemplateColumnsバインドされていないことです。

private void GroupByField_Click (object sender, RoutedEventArgs e){
        MenuItem mi = (MenuItem)sender;
        ContextMenu cm = (ContextMenu) mi.Parent;
        DataGridColumnHeader dgch = (DataGridColumnHeader) cm.PlacementTarget;  
        DataGridBoundColumn dgbc = (DataGridBoundColumn) dgch.Column;
        Binding binding = (Binding) dgbc.Binding;
        string BoundPropName = binding.Path.Path;

        //Do stuff based on bound property name here...
    }

たとえば、私のNameコラムを見てみましょう...それはDataGridTemplateColumn(そこに画像やその他のものが含まれているため)です。したがって、実際には「名前」プロパティにバインドされていません...しかし、上記のコードが機能するようにしたいと思います。

私の質問は 2 部構成です。

  1. DataGridTemplateColumn上記のコードが機能するように、BOUND にすることは可能ですか? どういうわけかプロパティにバインドできますか?

  2. または、まったく別の何かが必要で、上記のコードを変更する必要がありますか?

前もって感謝します!

4

5 に答える 5

35

Although you can't bind a template column, you can bind one of the controls held in that column. This is how I solved a similar problem:

<DataGridTemplateColumn Header="ColumnHeader">
     <DataGridTemplateColumn.CellTemplate>
           <DataTemplate>
                 <local:CustomisedUIElement Text="{Binding Path=PropertyToBindTo}"/>
           </DataTemplate>
     </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

If I've understood the initial example properly, this would mean changing the logic of the GroupByField_Click() method to check whether the sending column was a template column and then looking at the elements it contained to obtain the Binding object.

于 2010-12-03T18:11:20.657 に答える
3

トリッキーなものです。祖父母のUserControl(UserControl内にDataGridがあります)に移動することでバインドを実現し、UserControlはPresenter(この場合はモデル)にバインドされました。以下のコードで、DataGridTemplateColumn内に配置されたAutoCompleteBoxのプロパティSelectedItemを確認します。

<wpfToolkit:DataGridTemplateColumn  Header="{x:Static resources:Store.ItemNameC}" Width="0.60*">
  <wpfToolkit:DataGridTemplateColumn.CellEditingTemplate>
    <DataTemplate>
        <extended:HOAutoCompleteBox
                            IsTextCompletionEnabled ="True"
                            x:Name="ItemAutoCompleteBox"
                            Populating="ItemAutoCompleteBox_Populating"
                            DefaultType="HealthObject.ObjectModel.pSearchStockItemResult,HealthObject.ObjectModel"
                            Text="{Binding Path= ItemName, Mode=TwoWay}" 
                            <!--- **** HERE IS THE BINDING SAMPLE *****-->
            SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}},  Path=Model.SelectedStockItem, Mode=TwoWay}">
        </extended:HOAutoCompleteBox>
    </DataTemplate>
  </wpfToolkit:DataGridTemplateColumn.CellEditingTemplate>

</wpfToolkit:DataGridTemplateColumn>
于 2010-05-14T15:47:17.550 に答える
3

私にとって、ClipboardContentBindingDataGridTemplateColumnは解決策です:

Private Function FindBoundProperty(ByVal col As DataGridColumn) As String

    Dim boundColumn As DataGridBoundColumn = TryCast(col, DataGridBoundColumn)
    Dim boundPropertyName As String = ""
    Dim binding As Binding
    If col.DependencyObjectType.Name = "DataGridTextColumn" Then
        binding = TryCast(boundColumn.Binding, Binding)
        boundPropertyName = binding.Path.Path
    End If
    If col.DependencyObjectType.Name = "DataGridTemplateColumn" Then
        binding = TryCast(col.ClipboardContentBinding, Binding)
        boundPropertyName = binding.Path.Path
    End If
    Return boundPropertyName

End Function
于 2012-10-10T10:32:49.787 に答える
1

あなたは使用することができます dgbc.ClipboardContentBinding;

于 2010-11-24T14:11:11.940 に答える
0
  1. いいえ、は からDataGridTemplateColumn継承しないDataGridBoundColumnため、 へのキャストDataGridBoundColumnは失敗します。上記のコードを機能させるには、すべての列を抽象クラス
    から継承する必要があります。DataGridBoundColumnそのため、代わりに独自の派生列クラスを作成するDataGridTemplateColumnとうまくいくはずです。

  2. 単に入力することができます

    Dictionary<DataGridColumn, string> BoundPropName;

    初期化してから行う

    var propName = BoundPropName[dgch.Column]

于 2010-04-09T13:19:24.877 に答える