2012-10-12 8 views
6

Sto tentando di impostare un binding a una proprietà dell'interfaccia implementata esplicitamente da code-behind. Il motivo per l'associazione code-behind è che il percorso della proprietà associata può essere determinato solo in fase di esecuzione.WPF: associazione a una proprietà dell'interfaccia implementata esplicitamente dal codice sottostante/comportamento allegato

In XAML, è possibile associare thusly (esempio in MainWindow.xaml):

<TextBox Text="{Binding (local:IViewModel.Property)}"/> 

ed infatti, vincolante nel codice dietro funziona in modo simile (da MainWindow.xaml.cs):

var binding = new Binding("(local:IViewModel.Property)"); 

poiché WPF è in grado di rilevare la mappatura dello spazio dei nomi.

La mia domanda è, come faccio a formare un legame come questo quando la mappatura del namespace non è presente (ad esempio, in un comportamento allegato)?

Molte grazie in anticipo!

risposta

9

Si potrebbe specificare un completo PropertyPath:

var propertyInfo = typeof(IViewModel).GetProperty("Property"); 
var propertyPath = new PropertyPath("(0)", propertyInfo); 
var binding = new Binding 
{ 
    Path = propertyPath 
}; 

Per dettagli sulla sintassi passato a PropertyPath sopra, vedere PropertyPath.Path.

+0

Perfetto! Funziona come un fascino – mickeyt

+0

+1. Potresti postare un link ad un riferimento di sintassi per questo tipo speciale di indicizzazione. Non l'ho visto prima e non riesco a trovarlo nell'articolo MSDN [PropertyPath XAML Syntax] (http://msdn.microsoft.com/en-us/library/ms742451.aspx). Ho sempre pensato che doveva usare '[]'. – Clemens

+1

@Clemens: OK, aggiornato. –

Problemi correlati