¿Método preferido para enlazar en MVVM, Plantilla de datos en el archivo de Recursos o solo en DataContext en Ver?

Este me ha dejado perplejo cuando PENSO que miré todo, pero debo estar perdiendo algo. Me he salido del patrón MVVM tradicional de la revista MSDN:

http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

mientras aprende MVVM. Sin embargo, generalmente copio la mayoría del código y luego lo reemplazo como necesito, pero hoy quería crear algo desde cero y vi que puede haber más de lo que pensé. MVVM pareció no funcionar con enlaces cuando usé el diccionario de recursos, pero lo hace con datacontext directamente. En última instancia, esta pregunta quiere encontrar otros desarrolladores que sugieran utilizar el enlace que encuentren.

El resumen de la pregunta es el siguiente: ¿Por qué la 'Plantilla de datos' en el Diccionario de recursos parece no funcionar a continuación, pero el método directo 'DataContext' funciona con una vista de inmediato para los enlaces?

Es porque estoy haciendo una mezcla de código detrás con vistas de configuración en el código detrás. O potencialmente por algo más. Parece que mi propiedad y su implementación se configuran correctamente en el modelo de vista si configuro 'DataContext' directamente en el XAML de la vista, pero ¿por qué no en el Diccionario de recursos? Pensé que la ventaja de ese método era que podías establecer un montón de relaciones a la vez. Tengo curiosidad de que haya que hacer algún otro ajuste para que funcione. Es curioso que en el ejemplo principal del método MVVM, ellos usan plantillas de datos, sin embargo, parece que hay más en la configuración de lo que estoy haciendo para que sus 'enlaces' funcionen.

Lo que no funcionó para mí:

Intenté hacer algunas cosas muy básicas en una ventana principal xaml, dejando algo de mi código para simplificarlo aún más:

Ventana principal XAML:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:dxc="http://schemas.devexpress.com/winfx/2008/xaml/charts" x:Class="WPFTesting12_2.MainWindow"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <ResourceDictionary Source="Resources.xaml"/>
    </Window.Resources>
    <Grid>
        <DockPanel x:Name="dockpanel">
            <Menu DockPanel.Dock="Top" Height="30">
                <MenuItem Header="Charting">
                    <MenuItem Header="MVVMDataBound" x:Name="mnuDataBoundSeriesMVVMCharting" Click="mnuDataBoundSeriesMVVMCharting_OnClick"/>
                </MenuItem>
            </Menu>
            <TextBlock Height="5" Background="Black" DockPanel.Dock="Top" />
            <DockPanel x:Name="dockchildren" DockPanel.Dock="Bottom"/>
        </DockPanel>
    </Grid>
</Window>

Código de la ventana principal detrás:

public partial class MainWindow : Window
    {

        public MainWindow()
        {
            InitializeComponent();

            this.WindowState = WindowState.Maximized;
        }


        private void mnuDataBoundSeriesMVVMCharting_OnClick(object sender, RoutedEventArgs e)
        {
            View.DataBoundMVVMChart c = new DataBoundMVVMChart();

            dockchildren.Children.Clear();
            dockchildren.Children.Add(c);
        }
    }
}

Diccionario de recursos:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:vw="clr-namespace:WPFTesting12_2.View"
                    xmlns:vm="clr-namespace:WPFTesting12_2.ViewModel"
                    >
  <DataTemplate DataType="{x:Type vm:DataBoundMVVMChartViewModel}">
    <vw:DataBoundMVVMChart/>
 </DataTemplate>

<Style TargetType="MenuItem">
        <Setter Property="Background" Value="Wheat"/>
    </Style>
    <Style TargetType="Menu">
        <Setter Property="Background" Value="Wheat"/>
    </Style>

</ResourceDictionary>

Ver para DataBoundMVVMChart.xaml:

<UserControl x:Class="WPFTesting12_2.View.DataBoundMVVMChart"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:WPFTesting12_2.ViewModel"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <UserControl.Resources>
        <ResourceDictionary Source="..\Resources.xaml"/>
    </UserControl.Resources>
    <Grid>
        <DockPanel>
            <Menu DockPanel.Dock="Top">
                <MenuItem Header="TesterContent"/>
            </Menu>
            <Label DockPanel.Dock="Bottom" Width="300" x:Name="label" Height="50" Foreground="Blue" FontSize="24"  Content="{Binding Path=HelloString}"/>
        </DockPanel>
    </Grid>
</UserControl>

ViewModel para enlazar a la vista anterior:

namespace WPFTesting12_2.ViewModel
{
    class DataBoundMVVMChartViewModel : INotifyPropertyChanged
    {
        private string _HelloString;

        public string HelloString
        {
            get { return _HelloString; }
            set 
            {
                _HelloString = value;
                RaisePropertyChanged("HelloString");
            }
        }

        public DataBoundMVVMChartViewModel()
        {
            HelloString = "Hello there from the ViewModel";
        }

        public event PropertyChangedEventHandler PropertyChanged;

        protected void RaisePropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
        }
    }
}

De acuerdo, ahora el enlace fallará en la vista, pero los recursos del color entrarán. Así que pensé que hice algo mal, pero el código que está detrás obtendrá la propiedad de inmediato. Así que sigamos adelante:

Lo que hizo trabajar:

Magicialmente si simplemente agrego estas cuatro líneas a la vista:

Agregue esto a las declaraciones en el segmento 'UserControl' en la parte superior:

xmlns:local="clr-namespace:WPFTesting12_2.ViewModel"

A continuación, establezca una referencia al DataContext del UserControl:

<UserControl.DataContext>
        <local:DataBoundMVVMChartViewModel/>
    </UserControl.DataContext>

Respuestas a la pregunta(2)

Su respuesta a la pregunta