Verificación estática de enlaces

O "¿Cómo se asegura de que todas sus fijaciones se mantengan correctas?"
(Esto es un poco largo, pero tengan paciencia conmigo, traté de hacerlo lo más breve posible)

Considere el siguiente ejemplo:

    <TextBox Name="tb" />
    <TextBlock Text="{Binding Text.TheProp, ElementName=tb}" />

Se sabe perfectamente en tiempo de compilación que el enlace es incorrecto (es decir, el analizador conoce el tipo de elementotby, por lo tanto, sabe el tipo deText propiedad, y por lo tanto, sabe queTheProp no existe)
Sin embargo, este código se compilará y ejecutará (aunque con un mensaje de error vinculante en la salida de depuración).

Este comportamiento puede ser muy útil en algunas situaciones: no importa de qué tipo exacto sean mis datos, siempre que haya nombrado apropiadamente las propiedades, estoy bien. Por lo tanto, obtenemos una especie de "escritura de pato declarativa".

sin embargo, escribir pato no siempre es algo bueno.
Específicamente, mientras uso el patrón MVVM, sé (la mayoría de las veces) los tipos exactos de todos mis objetos ViewModel. Por otro lado, los modelos se vuelven cada vez más complejos con el tiempo, lo que me preocupa por la refactorización futura: ¿qué sucede si decido cambiar el nombre de algunas propiedades o, Dios no lo quiera, ponerlas en un objeto agregado separado? ¿Qué pasará con todas mis ataduras entonces? ¿Tendré que rastrillar todos los archivos XAML a mano? E incluso sin refactorizar, ¿qué pasa si simplemente hago un error tipográfico?

Un problema similar ya está resuelto en otros lugares de XAML. Si, por ejemplo, coloca un nombre de propiedad incorrecto enStyle/Setter/@Property, obtienes un error de tiempo de compilación.
TemplateBinding También proporciona dicha verificación. Lo cual es muy útil.

Entonces, idealmente, me encantaría ver algo como esto:

ProductViewModel.cs:

    public class ProductViewModel
    {
        public Name { get; set; }
        public Price { get; set; }
    }

ProductView.XAML:

    <UserControl x:Class="Shopping.View.ProductView"
                 x:DataContextType="vm:ProductViewModel"
                 xmlns:vm="clr-namespace:Shopping.ViewModel"
                 ... >
        <TextBox Text="{Binding Name}" />  <!-- OK -->
        <TextBox Text="{Binding Price}" /> <!-- OK -->
        <TextBox Text="{Binding ABC}" />   <!-- Compile time error: there is no property ABC in ProductViewModel -->
    </UserControl>

ShoppingCart.XAML:

    <UserControl x:Class="Shopping.View.ShoppingCartView"
                 x:DataContextType="vm:ShoppingCartViewModel"
                 xmlns:vm="clr-namespace:Shopping.ViewModel"
                 ... >
        <ItemsControl ItemsSource="{Binding Products}"
                      ItemType="vm:ProductViewModel" >  <!-- Static check happens here 
                                                             ShoppingCartViewModel.Products must 
                                                             implement IEnumerable<ProductViewModel> -->
            <ItemsControl.ItemTemplate>
                <DataTemplate DataType="vm:ProductViewModel">
                    <view:ProductView /> <!-- DataContext is known to be of correct type
                                              because of DataTemplate.DataType property -->
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </UserControl>

Pero volvamos a la realidad. En realidad, todo ese sueño no va a suceder en el futuro cercano.

Sin embargo, estoy seguro de que no soy la primera persona en tener este problema.
Entonces, finalmente, la pregunta es:¿Cómo se asegura de que sus enlaces sean correctos? ¿Y que se quedan así?

Respuestas a la pregunta(2)

Su respuesta a la pregunta