我正在开发一个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 属性。
答案 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>