/ / Защо този тип свързване има странно поведение? - c #, wpf, свързване

Защо този тип свързване има странно поведение? - c #, wpf, свързване

Като 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}" наистина са равни