Windows 商店应用程序的 MultiBinding(WPF) 替代品
MultiBinding(WPF) alternative for Windows Store Apps
我正在开发一个 Windows 商店应用程序,它在整个应用程序中显示特定类型的字段,并允许用户更改他们对显示该类型字段的单位的偏好。
使用与高度相关的字段示例,如果使用 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 是页面 class 的 属性,而 HeightInMetres 是 Person 类型的视图模型的 属性,它贯穿于包括例如在 ListViews 中使用的 DataTemplates。有一个包含 HeightDisplayUnit 的视图模型实例,但有多个 Person 视图模型实例。
在应用程序的各个位置,我可能会绑定到我想使用的人
谁能想出一种方法来实现触发更新所有 "height" 字段的目的,当 Page 属性 HeightDisplayUnit 或 Person 视图模型的 HeightInMetres 属性 已更新。
在视图模型中添加另一个只读的 属性 很简单。请记住从其他每个属性中提高 "PropertyChanged"。
<TextBlock Text="{Binding FormattedHeight}" />
...
public string FormattedHeight
{
get { return string.Format("{0} {1}", HeightInMetres, HeightDisplayUnit); }
}
考虑到您要绑定的数据来自不同的视图模型,将它们合并到一个视图模型中可能过于复杂属性,您应该考虑创建一个自定义控件来处理这种情况。
虽然您仍然无法进行多重绑定,但您将能够公开两个 DependencyProperties 来处理绑定。
您可以将多个运行添加到 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>
有 NuGet 包为 Windows Store apps. You can find documentation here 提供多绑定功能。
我正在开发一个 Windows 商店应用程序,它在整个应用程序中显示特定类型的字段,并允许用户更改他们对显示该类型字段的单位的偏好。
使用与高度相关的字段示例,如果使用 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 是页面 class 的 属性,而 HeightInMetres 是 Person 类型的视图模型的 属性,它贯穿于包括例如在 ListViews 中使用的 DataTemplates。有一个包含 HeightDisplayUnit 的视图模型实例,但有多个 Person 视图模型实例。
在应用程序的各个位置,我可能会绑定到我想使用的人 谁能想出一种方法来实现触发更新所有 "height" 字段的目的,当 Page 属性 HeightDisplayUnit 或 Person 视图模型的 HeightInMetres 属性 已更新。
在视图模型中添加另一个只读的 属性 很简单。请记住从其他每个属性中提高 "PropertyChanged"。
<TextBlock Text="{Binding FormattedHeight}" />
...
public string FormattedHeight
{
get { return string.Format("{0} {1}", HeightInMetres, HeightDisplayUnit); }
}
考虑到您要绑定的数据来自不同的视图模型,将它们合并到一个视图模型中可能过于复杂属性,您应该考虑创建一个自定义控件来处理这种情况。
虽然您仍然无法进行多重绑定,但您将能够公开两个 DependencyProperties 来处理绑定。
您可以将多个运行添加到 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>
有 NuGet 包为 Windows Store apps. You can find documentation here 提供多绑定功能。