Is there a "Control" in WPF, which acts as a do-nothing, show-nothing storage repository for a single piece of bound data? Basically, an invisible control which exposes only a "Tag" DependencyProperty.
I'd like to use such a control as a way to consolidate some of my 'frequently used' data bindings into a single location. If I later change the name of the ViewModel property, I only have to update the binding in one place; my 'tag' control.
Ex:
<!-- 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>
Such a control would also allow me to 'flatten' an other-wise complicated and deeply-nested ViewModel structure, within a single View. I could also use it as a placeholder when stubbing out a user interface mockup, and I have not yet generated the ViewModel.
Another ideal usage scenario would be as an alternative to creating a single-use "IValueConverter" class. As an example: rather than trying to fliter a data-bound value through an IValueConverter, in order to get a resulting "Opacity," I could just 'style' the StorageControl to present the correct value using DataTriggers:
<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>
I realize I could craft my own, but this seems like a generic-enough control that it might already exist.
Would I just use FrameworkElement in this scenario?