2011-03-28 101 views
3

长版本: 我有一个简单的WPF转换器比我的日期转换。转换器基本上检查日期并以dd/M/yyyy格式格式化。转换器在处理日期时会有一些智慧,这意味着用户可以键入“23061971”,并将该值转换为“23/06/1971”。WPF转换器可以访问它绑定到的控件吗?

这一切都是微不足道的和工作。问题是,当我更新值时,它不更新插入位置。假设“|”是插入符号和用户键入“23061971 |”那么毫秒后它会更新为“230619 | 71”。

我想要做的是检测值是否在插入尾部 - 如果是,则在新值更新后将其移至编辑字段的末尾。为了做到这一点,我需要访问转换器所附的编辑控件。

简短版本: 从WPF转换器,我可以得到绑定到该转换器的控件的引用吗?

回答

0

我不希望转换器有任何方法可以控制使用它。这只是将一个对象转换为另一个对象的一个​​简单逻辑。

但是,在您的情况下,也许您可​​以捕获更改事件,然后手动移动插入符号。如果你仔细想一想,插入符号的位置是严格意义上的问题;它与转换器或数据无关。你不应该加载视图控制器逻辑。你绝对不应该用转换器逻辑(它被归类在工具类中)。

1

在ValueConverter中,您无法访问该控件 - 但是,如果您在多值转换器中使用多重绑定,则可以访问该控件。

在多重绑定中,第一个绑定是你现在的绑定 - 没有转换器。你绑定到控件本身的第二个绑定 - 你可以访问控件。

我已经使用这种方法来获得其他东西也可以使你想触发更新的属性的“虚拟”绑定,即如果你绑定到控制本身,你将只会得到更新,如果它改变,而不是如果一个属性的确如此 - 为这些创建dummybinding。

0

您可以使用MultiBinding像这样发送控件。

<TextBox Height="100" x:Name="textbox1" DockPanel.Dock="Top"> 
     <TextBox.Text> 
      <MultiBinding Converter="{StaticResource MultiConverter}"> 
       <Binding ElementName="textbox1" Path="." /> 
      </MultiBinding> 
     </TextBox.Text> 
    </TextBox> 
2

这里是如何从一个转换器内得到控制直接访问的优秀文章:http://social.technet.microsoft.com/wiki/contents/articles/12423.wpfhowto-pass-and-use-a-control-in-it-s-own-valueconverter-for-convertconvertback.aspx

本质:

<MultiBinding Converter="{StaticResource MyConverter}" > 
    <Binding RelativeSource="{RelativeSource Self}" Mode="OneTime"/> 
    <Binding Path="MyValue2" /> 
</MultiBinding> 

转炉values[0]将是你的控制,准备好以铸造和values[1]将是你绑定的数据。