WPF转换器可以访问它绑定的控件吗?

时间:2011-03-28 04:33:24

标签: wpf binding

长版: 我有一个简单的WPF转换器,而不是日期转换。转换器基本上检查日期并以dd / M / yyyy格式格式化。转换器通过处理日期来做一些智能操作,这意味着用户可以键入“23061971”并将值转换为“23/06/1971”。

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

我想要做的是检测值末尾的插入符号 - 如果是,则在更新新值后将其移至编辑字段的末尾。为此,我需要访问转换器所连接的编辑控件。

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

4 个答案:

答案 0 :(得分:5)

这是一篇关于如何从转换器中直接访问控件的优秀文章: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]将是您要绑定的数据。

答案 1 :(得分:2)

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

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

我也使用这种方法来获取其他东西 - 你可以对你想要触发更新的属性进行“虚拟”绑定,即如果你绑定到控件本身,你只会在它改变时得到更新,而不是属性确实 - 所以为那些创建虚拟装订。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

我不知道转换器有没有办法得到使用它的控件。将一个对象转换为另一个对象只是一个简单的逻辑。

但是,在您的情况下,也许您可​​以捕获更改事件,然后手动移动插入符号。如果你考虑一下,插入位置严格来说是一个观点;它与转换器或数据无关。你不应该用它加载视图控制器逻辑。你绝对不应该将转换器逻辑(在实用程序类下分类)加载它。