【问题标题】:WPF TextBlock MultiBindingWPF TextBlock 多重绑定
【发布时间】:2013-04-04 20:31:41
【问题描述】:

我想将 TextBlock 的 Text 属性绑定到一些元素和一些模型的属性。像这样的:

<TextBlock>
    <TextBlock.Text>
        <MultiBinding>
            <Binding ElementName="myElement1" Mode="OneWay" Path="Text" />
            <Binding ElementName="myElement2" Mode="OneWay" Path="Text" />
            <Binding Mode="OneWay" Path="Property1" />
            <Binding Mode="OneWay" Path="Property2" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

TextBlock 有一个文本值,由 myElement1、myElement2 和 Property1、Property2 组合而成。没有问题。文本值生成成功。

这是我的问题:

我可以将 TextBlock 的整个(组合)文本值绑定到另一个模型的属性,即 Property3,而无需代码吗?

【问题讨论】:

  • 如果您使用 MVVM,我认为您不应该将自己编程到这种情况下。视图模型应该单独暴露和绑定到这些项目,而不是依赖视图来提供连接数据。 View 应该使用 MultiBinding 以各种格式“呈现”数据,但这与将数据放在一起并将其返回给 View-Model 不同。在 View 不再只是数据的 Presenter 的实现中,责任分离就消失了。
  • 是的,完全同意 Viv - 这不是你希望你的视图做的事情 - 如果需要,模型应该将连接的数据作为属性公开(不要从视图中获取它)。

标签: wpf textblock multibinding


【解决方案1】:

如果没有一些非常糟糕的黑客攻击,无论如何都需要编写一些代码来设置附加属性和其他绑定。问题是任何绑定都有两个端点:目标和源。由于目标(设置绑定的位置)必须是 DependencyProperty,这意味着您的模型必须位于您尝试执行的绑定的源端。就设置值而言,这不是问题,因为 TwoWay 和 OneWayToSource 绑定可以很好地做到这一点。

您有一个更大的问题,因为值来自的原始位置 (TextBlock.Text) 已经分配了绑定,因此不能成为模型绑定的目标。接下来您可能想尝试使用另一个 UIElement 属性作为中介来获取 Text 值并将其推送到模型。为此,您需要再次将模型作为源,并将其他 UIElement 属性作为目标。但是同样的属性也需要成为绑定到您尝试提取的原始 Text 属性的目标,所以您又被卡住了。

底线是你最好在你的模型和视图模型层中处理这个,而不是试图强迫你在 XAML 中设置的东西来驱动一切。

【讨论】:

  • 谢谢大家。我也有同样的想法,但我问是因为“可能”有一种方法。我通过在 http put / http post 请求之前分配字段 yo TextBlock 的 text 属性来解决这种情况。
猜你喜欢
  • 2013-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多