我想显示具有纬度和经度的文本块。在我的模型中,lat和lng是两个变量,所以我需要将它们组合起来,最好用this answer建议的stringformat。不幸的是,UWP应用程序似乎不支持多重绑定。
这给我留下了几个选择。
<RelativePanel>
<TextBlock x:Name="EquipmentLatTextBox"
Text="{Binding Equipment.lat}"/>
<TextBlock x:Name="EquipmentLngTextBox"
Text="{Binding Equipment.lng}"
RelativePanel.RightOf="EquipmentLatTextBox"/>
</RelativePanel>
创建值转换器。 这似乎也是非常不必要的。我明白了使用转换器来转换数据类型,但是为了合并字符串,属性中应该有一个构建。
在视图模型中创建一个属性,返回应显示的值的字符串。这似乎是最好的选择,因为该方法不在模型中,但我仍然认为我应该能够在xaml标记中执行此操作。
有更好的方法吗?
答案 0 :(得分:5)
这可以通过使用运行来解决。实际上,在UWP中实现这一点比在WPF中实现多重绑定要容易得多。 TextBlock项目可以包含多个&#34;运行&#34;可以绑定到不同属性的文本。运行将像内联元素一样运行。每次运行都可以在标签之间直接显示文本,或者作为文本属性。每个run-element也可以有独立的样式。
Documentation for the TextBlock class
对于我在问题中提供的示例,我最终将其格式化为
<TextBlock x:Name="LocationTextBlock">
<Run FontWeight="Bold">Location: </Run>
<LineBreak />
<Run>Lat: </Run>
<Run Text="{x:Bind ViewModel.Equipment.Lat}"></Run>
<Run> Lng: </Run>
<Run Text="{x:Bind ViewModel.Equipment.Lng}"></Run>
</TextBlock>
结果如下所示
位置:强>
Lat:00.000 Lng:00.000
答案 1 :(得分:1)
不,通用Windows平台目前不支持多重绑定。对您而言,最佳解决方案确实是在视图模型中创建专用属性,或者使用两个TextBox
控件。与WPF相比,UWP中的绑定语法更受限制,以确保尽可能最佳的性能。
您还可以考虑使用x:Bind
语法来确保UWP引入的强类型和优化绑定。