Wie MSDN sagen:Warum hat diese Typbindung merkwürdiges Verhalten?
Gegebenenfalls kann ein Zeitraum Pfad zum aktuellen Quelle binden genutzt werden kann (.). Zum Beispiel entspricht Text = "{Binding}" Text = "{Binding Path =.}".
Aber in zwei Beispielen unten i mit unterschiedlichem Verhalten konfrontiert:
Erstens:
<StackPanel>
<TextBox Text="{Binding Path=MyString, UpdateSourceTrigger=PropertyChanged}"/>
<Grid DataContext="{Binding Path=MyString}">
<TextBox Text="{Binding}"></TextBox>
</Grid>
</StackPanel>
dieses Beispiel raise Ausnahme mit der Meldung:
„Zwei-Wege-Bindung erfordert Pfad oder XPath. "
Zweitens:
<StackPanel>
<TextBox Text="{Binding Path=MyString, UpdateSourceTrigger=PropertyChanged}"/>
<Grid DataContext="{Binding Path=MyString}">
<TextBox Text="{Binding Path=.}"></TextBox>
</Grid>
</StackPanel>
Und dieses Beispiel richtig und erste TextBox Textänderung laufen reflektierte Ansichtsmodell und den Text der ersten TextBox geändert zu, aber wenn die zweite TextBox Text geändert, dass nicht zu Ansichtsmodell reflektiert (oder ersten Textfeld)!
Frage: Ich schätze jemand erklären dieses zwei Szenario?
Hinweis: Datacontext der Elternkontrolle (wie Fenster) ist eine einfache Klasse mit einer Eigenschaft pflichtige MyString:
Dank.
* in der Datacontext die String-Instanz von dem Text ersetzt den Text in der zweiten TextBox * bearbeiten. Es aktualisiert keine Eigenschaft. – Clemens
@Clemens, "die String-Instanz im DataContext" ist MyString, warum also nicht aktualisiert? –
Für den Binding-Fehler in einem Fall, aber nicht der andere: die Text-Eigenschaft bindet standardmäßig bidirektional, und offensichtlich überprüft die Binding-Klasse, ob die Path-Eigenschaft festgelegt ist, wenn es zweiseitig ist. Es scheint jedoch, dass es nicht überprüft, ob Path eine Eigenschaft oder nur das Quellobjekt selbst bezeichnet. – Clemens