Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows runtime Windows应用商店应用的多绑定(WPF)替代方案_Windows Runtime_Windows Store Apps_Winrt Xaml - Fatal编程技术网

Windows runtime Windows应用商店应用的多绑定(WPF)替代方案

Windows runtime Windows应用商店应用的多绑定(WPF)替代方案,windows-runtime,windows-store-apps,winrt-xaml,Windows Runtime,Windows Store Apps,Winrt Xaml,我正在开发一个Windows应用商店应用程序,该应用程序在整个应用程序中显示特定类型的字段,并允许用户更改其显示该类型字段的首选单位 使用与高度相关的字段示例,如果使用WPF中的多重绑定(WinRT中不可用),我希望执行以下操作: <Page x:Name="Page" ...> ... <TextBlock> <TextBlock.Text> <MultiBinding Converter={Stat

我正在开发一个Windows应用商店应用程序,该应用程序在整个应用程序中显示特定类型的字段,并允许用户更改其显示该类型字段的首选单位

使用与高度相关的字段示例,如果使用WPF中的多重绑定(WinRT中不可用),我希望执行以下操作:

<Page x:Name="Page" ...>

...

    <TextBlock>
        <TextBlock.Text>
            <MultiBinding Converter={StaticResource HeightConverter}>
                <Binding Path="HeightInMetres"/>
                <Binding Path="HeightDisplayUnit" ElementName="Page"/>
            </MultiBinding>
        </TextBlock.Text>

    </TextBlock>

....

</Page>

...
....
其中,HeightUnit是指英尺、米等的计数

HeightDisplayUnit和HeightInMeters位于不同的视图模型中

在上面的示例中,HeightDisplayUnit是Page类的一个属性,HeightInMeters是Person类型的视图模型的一个属性,该视图模型被绑定,例如在ListView中使用的数据模板中。有一个视图模型实例包含HeightDisplayUnit,但有多个Person视图模型实例

在应用程序的不同位置,我可能会绑定到我想使用应用程序的人
当更新Person视图模型的Page属性HeightDisplayUnit或HeightInMeters属性时,谁能想到一种方法来实现触发所有“高度”字段更新的目的。

在视图模型中添加另一个只读属性很简单。只需记住从其他每个属性中提升“PropertyChanged”

<TextBlock Text="{Binding FormattedHeight}" />

考虑到您绑定的数据来自不同的视图模型,并且将其合并为单个属性可能太复杂,因此应考虑创建自定义控件来处理此场景。


虽然您仍然无法进行多重绑定,但您可以公开两个DependencyProperties来处理绑定。

您可以将多个运行添加到一个textblock,并将它们绑定到不同的源:

<Page.Resources>
    <x:String x:Key="String1">AAA</x:String>
    <x:String x:Key="String2">BBB</x:String>
</Page.Resources>

<Grid>
    <TextBlock>
        <Run Text="{StaticResource String1}"></Run>
        <Run Text="{StaticResource String2}"></Run>
    </TextBlock>
</Grid>

AAA
BBB

有些NuGet软件包为应用程序提供多绑定功能。您可以找到文档。

感谢您的回复。问题在于HeightDisplayUnit与HeightInMeters不是同一视图模型的属性。有关更多详细信息,请参阅编辑。@alistairm我认为这里的两个新答案都是很好的建议,应该会奏效。这是一个非常好的建议。如果不需要控制数据的显示顺序,则比我的要简单得多。我使用了一个具有2个依赖属性和一个值转换器输入的自定义控件。我喜欢这个解决方案,因为它以一种通用的方式解决了这个问题,并且适用于格式化值甚至不是远程使用相同格式的情况。感谢所有的回应。
<Page.Resources>
    <x:String x:Key="String1">AAA</x:String>
    <x:String x:Key="String2">BBB</x:String>
</Page.Resources>

<Grid>
    <TextBlock>
        <Run Text="{StaticResource String1}"></Run>
        <Run Text="{StaticResource String2}"></Run>
    </TextBlock>
</Grid>