为了账号安全,请及时绑定邮箱和手机立即绑定

未调用 ConvertBack

未调用 ConvertBack

C#
慕码人2483693 2023-09-09 17:13:49
我正在尝试编写一个通用控件,在其中我可以INotifyPropertyChanged使用转换器传递不同的数据模型(全部实现)。数据在控件中传递没有问题,并且显示正确(其中一些还使用IMultivalueConverts,它工作完美)。虽然修改了数据,但是IMultiValueConverter并没有调用MainControl的。通用控件应该只显示根据 ObservableCollection 中的坐标计算出的矩形。我将 DebugConverters 放在所有绑定上,除了顶部的 ConvertBack 之外,所有内容似乎都已更新。还调用 ListBox 中的 SourceUpdate。我用不同的 NotifyOn...Updated、Mode 和 UpdateSourceTrigger 尝试了这个转换器,我总是看到控件中的值发生变化,但从未看到主控件的 ConvertBack。使用的部分数据模板(更新正确完成),所有 DegreeTo... 转换器都以两种方式调用        <DataTemplate x:Key="RectangleWithLabel">            <Canvas IsHitTestVisible="True">                <Rectangle x:Name="RectangleROI" MouseLeftButtonDown="myCanvas_PreviewMouseLeftButtonDown" >                    <!--                    <Rectangle.Visibility>                        <Binding Path="ROI" Converter="{StaticResource NullToVisibilityConverter}"/>                    </Rectangle.Visibility>                    -->                    <Canvas.Left>                        <MultiBinding Converter="{StaticResource DegreeToScreenPixelConverterH}" Mode="TwoWay" NotifyOnSourceUpdated="True" NotifyOnTargetUpdated="True" UpdateSourceTrigger="PropertyChanged" >                            <Binding Path="ROI.Begin.PosH" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" NotifyOnSourceUpdated="True" NotifyOnTargetUpdated="True" />                            <Binding Path="DataContext.UsedCoordinateSystem" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UserControl}}" NotifyOnSourceUpdated="True" Mode="TwoWay" NotifyOnTargetUpdated="True" UpdateSourceTrigger="PropertyChanged" />                        </MultiBinding>                    </Canvas.Left>                    <Canvas.Top>
查看完整描述

1 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

当两个元素之间存在直接连接时,我假设更改会通过转换器向下传播,这是错误的。

因此,如果我有一个深度嵌套的元素(只需将其视为树的叶子),并且它通过转换器显示一次(这会更改其他一些对象),并且同时没有转换器,则该元素会更新无需调用转换器。WPF 非常聪明,可以看到值是相同的,并且不会通过转换器上下传递变化。


查看完整回答
反对 回复 2023-09-09
  • 1 回答
  • 0 关注
  • 71 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信