我只是在玩一个简单的ContentPresenter。
<TextBox Text="{Binding Path=TestString, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
<ContentPresenter Content="{Binding}">
<ContentPresenter.ContentTemplate>
<DataTemplate>
<StackPanel>
<TextBox Text="{Binding Path=TestString, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StackPanel>
</DataTemplate>
</ContentPresenter.ContentTemplate>
</ContentPresenter>这段代码工作得很好--如果我在Stackpanel文本框中输入了什么东西,外面的Textbox就会被实现。另一种情况也是如此。
如果我将代码更改为:
<TextBox Text="{Binding Path=TestString, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
<ContentPresenter Content="{Binding Path=TestString, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}">
<ContentPresenter.ContentTemplate>
<DataTemplate>
<StackPanel>
<TextBox Text="{Binding Path=., UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StackPanel>
</DataTemplate>
</ContentPresenter.ContentTemplate>
</ContentPresenter>当我在ContentPresenter之外更改Textbox时,它会被实现,但是如果我在模板中更改文本,它将不会被转换回。
为什么?
谢谢!
发布于 2015-05-20 09:02:56
<ContentPresenter Content="{Binding Path=TestString,UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}">
<ContentPresenter.ContentTemplate>
<DataTemplate>
<StackPanel>
<TextBox Text="{Binding Path=., UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StackPanel>
</DataTemplate>
</ContentPresenter.ContentTemplate>
</ContentPresenter>绑定到Path=。意味着绑定到DataContext对象。在ContentTemplate内部,DataContext是内容。也就是说,您的DataContext是一个字符串。在这种情况下,从绑定到TestString的字符串。
用窥探来观察这一点。
编辑:
这就是你要找的吗?
<TextBox Text="{Binding Path=Content,RelativeSource={RelativeSource AncestorType=ContentPresenter}}"/>顺便说一句:默认情况下,控制模板中的ContentPresenter会为您完成所有这些操作。
https://stackoverflow.com/questions/30341762
复制相似问题