2012-10-12 10 views
6

Ich versuche eine Bindung zu einer explizit implementierten Interface-Eigenschaft von Code-Behind einzurichten. Der Grund für die CodeBehind-Bindung ist, dass der Pfad zur gebundenen Eigenschaft nur zur Laufzeit festgelegt werden kann.WPF - Bindung an eine explizit implementierte Interface-Eigenschaft von Code hinter/angehängtes Verhalten

In der XAML ist es möglich, auf diese Weise (Beispiel in MainWindow.xaml) zu binden:

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

und in der Tat funktioniert in ähnlicher Weise hinter im Code-Bindung (von MainWindow.xaml.cs):

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

seit WPF das Namespace-Mapping abholen kann.

Meine Frage ist, wie kann ich eine Bindung wie diese bilden, wenn das Namespace-Mapping nicht vorhanden ist (z. B. in einem angehängten Verhalten)?

Vielen Dank im Voraus!

Antwort

9

Sie würden eine vollständige PropertyPath angeben:

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

Einzelheiten zur Syntax PropertyPath oben geführt, PropertyPath.Path sehen.

+0

Perfekt! Funktioniert wie ein Charme – mickeyt

+0

+1. Könnten Sie vielleicht einen Link zu einer Syntaxreferenz für diese spezielle Art der Indizierung veröffentlichen? Ich habe es vorher nicht gesehen und kann es nicht im MSDN-Artikel [PropertyPath XAML Syntax] (http://msdn.microsoft.com/en-us/library/ms742451.aspx) finden. Ich dachte immer, es müsste '[]' benutzen. – Clemens

+1

@Clemens: OK, aktualisiert. –

Verwandte Themen