【发布时间】:2012-02-13 13:09:37
【问题描述】:
我想要一个始终在绑定上应用转换器的文本框。这样我就不需要指定转换器了,样式已经包含了要使用的转换器。
这是我已经尝试过的:
我有一个绑定到视图的 ViewModel。我使用视图模型的属性覆盖了该视图中文本框的数据上下文。它允许我为我的文本框使用通用样式
我有以下风格:
<Style x:Key="DateTimeTextBox" TargetType="TextBox">
<Setter Property="ToolTipService.ShowDuration" Value ="40000"/>
<Setter Property="Text" Value ="{Binding Path=.,Converter={StaticResource myConverter},UpdateSourceTrigger=PropertyChanged}"/>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="Unknown date format"/>
</Trigger>
</Style.Triggers>
</Style>
在视图中,我希望将以下文本框绑定到属性 DateTimeValueToBind 而不是整个视图模型上:
<TextBox Style="{StaticResource DateTimeTextBox}" DataContext="{Binding DateTimeValueToBind}"/>
属性 DateTimeValueToBind 在文本框中正确显示,但它不再绑定(当我修改它时,viewmodel 属性没有改变)
我尝试在绑定选项中添加 Mode=TwoWay 但它没有改变任何东西。
能否解释为什么 DateTimeValueToBind 属性在此上下文中不再绑定?
提前致谢
【问题讨论】:
-
“不再绑定;viewmodel 属性未更改”是什么意思?如果您修改 DataContext,CLR 属性需要提高,否则 UI 将持有对旧视图模型的引用。如果正确引发 DataTimeValueToBind,它应该会自动重新引发 Text 属性。您可以通过将 PresentationTraceSources.TraceLevel=High 添加到 Binding 标记来更好地了解绑定的工作原理。
-
@dowhilefor:我不修改数据上下文实例,我只想将绑定委托给文本框,以便在我的样式(数据转换器)中使用一些通用绑定选项用于此上下文。我可以简单地绑定 Text 属性,但在这种情况下,我总是需要指定转换器,我想将转换过程放在样式中。