Xaml UWP中的多绑定

Xaml UWP中的多绑定,xaml,uwp,uwp-xaml,Xaml,Uwp,Uwp Xaml,我想显示一个带有纬度和长度的文本块。在我的模型中,lat和lng是两个变量,所以我需要将它们组合起来,最好是按照建议的stringformat。不幸的是,UWP应用程序似乎不支持多重绑定 这让我有两个选择 创建两个绑定到每个变量的文本块,并将它们相邻对齐。我不确定是否需要两个额外的文本块才能在值前面显示“lat”和“lng”。然后第三个标签再次在前面显示“位置”。声明绑定没有stringformat属性。在我看来,总共五个文本块太多了 创建一个值转换器。 这似乎也很不必要。我明白了使用转换器

我想显示一个带有纬度和长度的文本块。在我的模型中,lat和lng是两个变量,所以我需要将它们组合起来,最好是按照建议的stringformat。不幸的是,UWP应用程序似乎不支持多重绑定

这让我有两个选择

  • 创建两个绑定到每个变量的文本块,并将它们相邻对齐。我不确定是否需要两个额外的文本块才能在值前面显示“lat”和“lng”。然后第三个标签再次在前面显示“位置”。声明绑定没有stringformat属性。在我看来,总共五个文本块太多了
  • 
    
  • 创建一个值转换器。 这似乎也很不必要。我明白了使用转换器在数据类型之间进行转换的重要性,但是对于concatating字符串,应该有buildt-in属性

  • 在视图模型中创建一个属性,该属性返回应显示的值字符串。这似乎是最好的选择,因为该方法不在模型中,但我仍然认为我应该能够在xaml标记中做到这一点


  • 有更好的方法吗?

    没有,通用Windows平台目前不支持多绑定。您的最佳解决方案实际上是在视图模型中创建一个专用属性,或者使用两个
    文本框
    控件。与WPF相比,UWP中的绑定语法更加有限,以确保尽可能的最佳性能


    您还可以考虑使用<代码> x:Bix< /Cord>语法,以确保强类型和优化绑定,这是UWP引入的。

    < P>这可以通过使用Run来解决。实际上,在UWP中实现这一点要比在WPF中使用多绑定容易得多。TextBlock项可以由多个文本“运行”组成,这些文本可以绑定到不同的属性。运行的行为类似于内联元素。每次运行都可以在标记之间直接包含文本,或者作为文本属性。每个梯段元素也可以具有独立的样式

    对于我在问题中提供的示例,我最终将其格式化为

    <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>
    
    
    地点:
    拉丁美洲:
    液化天然气:
    
    结果是这样的

    <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

    对不起,我似乎不完全明白你在问什么。为什么不创建属性(并创建与此属性的绑定),getter返回您想要的任何内容(对于expamle返回String.Format(“{0}和{1}”,device.lat,Exuipment.lng);)是的,这是第三个选项的功能。很明显,我应该写属性而不是方法。。。我的问题是,是否有办法在xaml标记中实现这一点,而不是在我的视图模型中创建属性。可以像转换器一样可重用,但与VM属性一样易于编写。