[C#] WPF - Come associare un DataGridTemplateColumn


Answers

Per me, ClipboardContentBinding di DataGridTemplateColumn è una soluzione:

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
Question

Sto cercando di ottenere il nome della proprietà associata a una particolare DataGridColumn , in modo che possa quindi fare alcune cose basate su quello. Questa funzione viene chiamata quando l'utente fa clic sulla voce di menu contestuale nell'intestazione della colonna ...

Questo va bene per i tipi di colonna pronti all'uso pronti all'uso come DataGridTextColumn , poiché sono associati, ma il problema è che alcune delle mie colonne sono DataGridTemplateColumns , che non sono vincolate.

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...
    }

Quindi, prendi ad esempio la colonna del mio Name ... è un DataGridTemplateColumn (dato che ha un'immagine e altre cose lì dentro). Pertanto, non è in realtà legato alla proprietà 'Nome' ... ma mi piacerebbe esserlo, in modo che il codice sopra funzionerà.

La mia domanda è in due parti, in realtà:

  1. È possibile rendere BOUND una DataGridTemplateColumn , in modo che il codice sopra possa funzionare? Posso legarlo in qualche modo a una proprietà?

  2. O ho bisogno di qualcosa di completamente diverso, e cambiare il codice sopra?

Grazie in anticipo!

A




Puoi usare dgbc.ClipboardContentBinding;