gpt4 book ai didi

c# - ContentPresenter 的异常行为

转载 作者:太空宇宙 更新时间:2023-11-03 13:07:14 25 4
gpt4 key购买 nike

我只是在玩一个简单的 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 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 之外更改文本框时,它会被执行,但是如果我在模板内更改文本,它不会被转换回来。

为什么?

谢谢!

最佳答案

 <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>

绑定(bind)到路径=。表示绑定(bind)到 DataContext 对象。在 ContentTemplate 内部,DataContext 就是内容。即您的 DataContext 是一个字符串。在这种情况下,String 从 Binding 接收到 TestString。

使用 snoop 观察这个。

编辑:

这是你要找的吗

 <TextBox Text="{Binding Path=Content,RelativeSource={RelativeSource AncestorType=ContentPresenter}}"/>

顺便说一句:默认情况下,ContentPresenter 本身在控件模板中会为您完成所有这些工作。

关于c# - ContentPresenter 的异常行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30341762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com