wpf - 不会为 XML 元素触发 TextBox ConvertBack 事件

标签 wpf

ValueFormattingConverter.Convert 使用 XmlElement 调用。 ConvertBack 永远不会被调用。为什么?是否有义务将具有约束力的指令向下传递到链中? TextBox 的使用是否覆盖了它自己的绑定(bind)设置?可以做什么?

我的文本框

<TextBox Width="200" 
         Text="{Binding Path=., Converter={StaticResource valueFormattingConverter}}",
         Mode=TwoWay,
         NotifyOnSourceUpdated=True,
         NotifyOnValidationError=True,                
         UpdateSourceTrigger=PropertyChanged}" />

用法相当复杂。从顶部开始,我们为选项卡提供了一个 XML 元素。

<TabItem.DataContext>
    <Binding Source="{StaticResource mcf}", 
             XPath="mdf/press_information"/>
</TabItem.DataContext>

该选项卡包含一个 ItemsControl,它通过传递绑定(bind)的 ControlChooser 构建 TextBoxes。

<ItemsControl.ItemTemplate>
    <DataTemplate>
        <W3V:ControlChooser RelativeSource="{RelativeSource AncestorType=W3V:ObjectList}", 
                            Content="{Binding}"/>
    </DataTemplate>
</ItemsControl.ItemTemplate>

我的转换器类标题。转换方法被调用。 ConvertBack 从不。

  [ValueConversion(typeof(XmlElement), typeof(string))]
  public class ValueFormattingConverter : IValueConverter

编辑:选择的答案基本上是 Path=。不支持双向绑定(bind)。我相信这是问题的正确答案。知道很有帮助,但“不能那样做”并不能解决更大的问题。所以我在这里提出了更大的问题:Means of generating an editable form from XML .

最佳答案

到源的绑定(bind)方向不适用于{Binding Path=.}。这是因为没有绑定(bind)属性,只有绑定(bind)源对象。

因此永远不会有源更新,并且永远不会调用 ConvertBack 方法,因为那意味着替换源对象。

为了使您的代码正常工作,您必须绑定(bind)到某些属性:

<TextBox Text="{Binding Path=SomeElement, ...}"/>

关于wpf - 不会为 XML 元素触发 TextBox ConvertBack 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30987019/

相关文章:

c# - InitializeComponent 在绑定(bind)时触发 StackOverflow 异常

c# - WPF:访问同一控件中的两个 DataContext

c# - 无法将枚举绑定(bind)到组合框 wpf mvvm

wpf - 简单 WPF ItemsControl 的奇怪焦点行为

c# - WPF Dispatcher VS Winform UI 线程控制调用

c# - RaisePropertyChanged 在另一个 View 模型中

c# - Vlc.Dotnet 在 WPF 上播放流式 h264 原始数据

c# - 如何在 WPF 中创建可编辑的树 ListView ?

.net - WPF:如何为组件列表添加动画?

c# - 何时在 Prism 中加载数据合适