Като MSDN казвам:
По избор може да се използва период (.) За свързване към тока източник. Например Text = "{Binding}" е еквивалентно на Text = "{Binding Path =.} ".
Но в два случая по-долу се сблъсках с различно поведение:
Първо:
<StackPanel>
<TextBox Text="{Binding Path=MyString, UpdateSourceTrigger=PropertyChanged}"/>
<Grid DataContext="{Binding Path=MyString}">
<TextBox Text="{Binding}"></TextBox>
</Grid>
</StackPanel>
този пример повдига изключение с съобщение:
"Двупътното свързване изисква път или XPath."
Второ:
<StackPanel>
<TextBox Text="{Binding Path=MyString, UpdateSourceTrigger=PropertyChanged}"/>
<Grid DataContext="{Binding Path=MyString}">
<TextBox Text="{Binding Path=.}"></TextBox>
</Grid>
</StackPanel>
И този пример работи правилно и първата TextBoxпромяна на текста, отразена в мостра и текста на първия TextBox, но когато се промени текстът на втория текст, който не се отрази на viewmodel (или на първия TextBox)!
Въпрос: Оценявам някой да обясни този два сценария?
Забележете: DataContext на родителски контрол (като например прозорец) е прост клас с собственост, която трябва да бъде съобщена MyString:
Благодаря.
Отговори:
0 за отговор № 1изглежда, когато е необходимо двупосочно свързване {Binding Path =.}. опитайте да промените кода като:
<StackPanel>
<TextBox Text="{Binding Path=MyString, UpdateSourceTrigger=PropertyChanged}"/>
<Grid DataContext="{Binding Path=MyString}">
<!--<TextBox Text="{Binding}"></TextBox>-->
<Label Content="{Binding}"/>
</Grid>
</StackPanel>
и тя работи добре. На оригиналния код по пътя свързването също работи.
тук е относителна тема:
"{Binding Path =.}" И "{Binding}" наистина са равни