适用于Windows应用商店应用的MultiBinding(WPF)替代方案

时间:2015-03-06 01:47:19

标签: windows-runtime windows-store-apps winrt-xaml

我正在开发一个Windows应用商店应用,它在整个应用中显示特定类型的字段,并允许用户更改他们的单位偏好以显示该类型的字段。

使用与Heights相关的字段示例,如果使用WPF中的MultiBinding(在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和HeightInMetres保存在不同的视图模型中。

在上面的示例中,HeightDisplayUnit是Page类的属性,HeightInMetres是Person类型的视图模型的属性,它包含在例如ListViews中使用的DataTemplates中。有一个包含HeightDisplayUnit的视图模型实例,但是Person视图模型的实例很多。

在应用程序的各个位置,我可能绑定到我想要使用的人 任何人都可以想到一种方法来实现触发更新所有&#34;身高&#34;字段何时更新Person视图模型的Page属性 HeightDisplayUnit HeightInMetres 属性。

4 个答案:

答案 0 :(得分:2)

在视图模型中添加另一个只读属性非常简单。只记得提出&#34; PropertyChanged&#34;来自其他每个房产。

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

...

public string FormattedHeight
{
    get { return string.Format("{0} {1}", HeightInMetres, HeightDisplayUnit); }
}

答案 1 :(得分:2)

考虑到您绑定的数据来自不同的视图模型,将它们合并为单个属性可能过于复杂,您应该考虑创建一个自定义控件来处理这种情况。

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

答案 2 :(得分:2)

有一些NuGet包为Windows Store个应用程序提供MultiBinding功能。您可以找到文档here

答案 3 :(得分:1)

您可以将多个运行添加到1个文本块并将它们绑定到不同的源:

<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>