【问题标题】:Style binding options样式绑定选项
【发布时间】: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 属性,但在这种情况下,我总是需要指定转换器,我想将转换过程放在样式中。

标签: wpf xaml mvvm


【解决方案1】:

保留DataContext,将Text 绑定到DateTimeValueToBind(将绑定从DataContext 移动到Text)。您永远不应该在样式中设置这样的绑定;如果路径是.,你不能绑定TwoWay。 (你到底保存了什么?你甚至还有更多的东西要写,因为"DataContext""Text" 长。)

【讨论】:

  • 我理解通常会做什么,但在这种情况下,我不知道该属性的名称是什么。在我的应用程序中,我有很多日期要显示(不同的属性名称) 我想应用一个通用绑定,它将强制使用特定的转换器并在绑定时始终指定它。我该怎么做?
  • @gbr:一旦知道要绑定什么,就可以通过编程方式创建绑定。
  • 在我之前的评论中我应该写“我想应用一个通用绑定,它将强制使用特定的转换器,并且 NOT 在绑定时总是指定它”。简而言之,我想“样式化”我的绑定选项
  • @gbr:为此,您可以从Binding 继承并预设子类中的所有内容。 Sting 绑定是不可能的。
猜你喜欢
  • 1970-01-01
  • 2011-06-05
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
  • 2023-03-31
相关资源
最近更新 更多