2015-08-10 5 views
5

Si consideri il seguente, modelli troppo semplificati-on-purpose vista:Come utilizzare un'istanza di PropertyDescriptor come parte di una definizione di Binding, piuttosto che usare PropertyPath?

public class GridRowViewModel 
{ 
    public object RowData { get; set; } 
    public int RowHeight { get;set; } 
    //... 
} 

public class GridColumnViewModel 
{ 
    public PropertyDescriptor DataFieldDescriptor { get; set; } 
    public int ColumnWidth { get; set; } 
    //... 
} 

Come avrete già capito, voglio ViewModels di manipolare una vista a griglia come da codice, eppure continuano attuali classi di dati preoccupazioni separati. L'obiettivo è di consentirmi di introdurre funzionalità come la colorazione delle righe o più meccanismi di modifica delle righe all'interno di un modello di visualizzazione "proxy" che esporrà il reale, oggetto dati non riconosciuto come proprietà semplice.

Sul lato XAML, mi piacerebbe utilizzare un modello di colonna che fa qualcosa di simile:

<DataTemplate> 
    <ContentControl> 
     <TextBox 
      Text="{Binding 
          Source=RowData, 
          Path=(ext:GridCellExtensions.Column.DataFieldDescriptor)}" 
     /> 
    </ContentControl> 
</DataTemplate> 

Come si può dire, ho entrare in contatto con l'istanza della colonna attraverso una proprietà associata. Quella parte funziona. Tuttavia, non ho idea di come dire al motore di binding di utilizzare l'istanza dichiarata, pronta per l'uso, PropertyDescriptor anziché provare a risolverne una nuova. In effetti, non ho idea se questo possa essere fatto.

Quindi può essere fatto? Se é cosi, come?

Inoltre, si prega di notare: i modelli di cui sopra sono semplificati al fine di mantenere questo post il più semplice possibile, ma sono stati progettati in questo modo per motivi che vanno oltre il problema attuale. Quindi proporre una soluzione che mi obbligherà a ripensare a questo progetto molto probabilmente creerà più problemi di quanti ne risolva. Quindi sono davvero alla ricerca di una soluzione a livello XAML. Se nessuno esiste, accetterò questo fatto come risposta.

+0

Dove è 'ResolvedGridColumnInstance' definito? È una proprietà del 'RowData'? –

+0

@ MikeEason no non lo è. In realtà è stato risolto da un'estensione. Volevo tenerlo fuori per mantenere il codice il più facile da leggere possibile, ma capisco come possa essere fonte di confusione. Modifico il post – Crono

+0

solo suggerimento: http://stackoverflow.com/questions/6441318/custom-wpf-binding – shibormot

risposta

-1

Da quello che ho capito, vuoi che il percorso del binding sia dinamico.

Ciò può essere ottenuto associando la proprietà path utilizzando un comportamento. es:

<TextBlock > 
    <i:Interaction.Behaviors> 
     <behaviors:CustomBindingBehavior PropertyPath="{Binding Path=HeaderPropertyBinding}" IsBinding="{Binding Path=HeaderIsBinding}" /> 
    </i:Interaction.Behaviors> 
</TextBlock> 

Penso che questo articolo può aiutarvi a:

Binding the path property of a binding

Problemi correlati