WPF 中是否有一个“控件”,它充当单个绑定数据的无操作、无显示存储库?基本上,一个不可见的控件只公开一个“标签”DependencyProperty。
我想使用这样的控件来将我的一些“常用”数据绑定合并到一个位置。如果我稍后更改 ViewModel 属性的名称,我只需在一处更新绑定;我的“标签”控件。
前任:
<!-- Does this type of control exist? -->
<StorageControl x:Name="someData" Tag="{Binding MyProperty}" />
<StorageControl x:Name="moreData" Tag="{Binding MyOtherProperty}" />
<!-- further down the XAML file... -->
<TextBlock Text="{Binding Tag, ElementName=someData}">
<Image.Style>
<!-- Style makes reference to "someData" and "moreData," -->
<!-- with data triggers effecting the appearance. -->
</Image.Style>
</TextBlock>
<Image>
<Image.Style>
<!-- Style makes reference to "someData" and "moreData," -->
<!-- with data triggers effecting the appearance. -->
</Image.Style>
</Image>
这样的控件还可以让我在单个视图中“展平”一个复杂且深度嵌套的 ViewModel 结构。在生成用户界面模型时,我还可以将它用作占位符,但我还没有生成 ViewModel。
另一个理想的使用场景是创建一次性“IValueConverter”类的替代方案。举个例子:与其尝试通过 IValueConverter 过滤数据绑定值,为了获得结果“不透明度”,我可以只使用 DataTriggers 对 StorageControl 进行“样式化”以呈现正确的值:
<StorageControl x:Name="opacityHost">
<StorageControl.Style>
<Style TargetType="StorageControl">
<Setter Property="Tag" Value="1.0" />
<Style.Triggers>
<DataTrigger Binding="{Binding MyProperty}">
<!-- This opacity trigger can now be used -->
<!-- by many other controls, without overriding their style -->
<Setter Property="Tag" Value="0.5" />
</DataTrigger>
</Style.Triggers>
</Style>
</StorageControl.Style>
</StorageControl>
我意识到我可以自己制作,但这似乎是一个足够通用的控件,它可能已经存在。
我会在这种情况下只使用FrameworkElement吗?