Enlace de datos en controles de usuario WPF

Estoy creando un UserControl para una serie de controles compartidos por varias ventanas. Uno de los controles es una etiqueta que muestra el flujo de algún otro proceso en términos de “números de protocolo”.

Estoy tratando de ofrecer DataBinding con esta etiqueta para que la ventana refleje automáticamente el estado del proceso a medida que cambia la variable de número de protocolo.

Este es el control de usuario XAML:

   

Y este es el Código-Detrás:

 public partial class MainControls { public MainControls() { InitializeComponent(); } public int ProtocolNumber { get { return (int)GetValue(ProtocolNumberProperty); } set { SetValue(ProtocolNumberProperty, value); } } public static DependencyProperty ProtocolNumberProperty = DependencyProperty.Register("ProtocolNumber", typeof(int), typeof(MainControls)); } 

Esto parece estar funcionando porque si en el constructor configuro ProtocolNumber a un valor arbitrario, se refleja en el control del usuario.

Sin embargo, al usar este control de usuario en la ventana final, el enlace de datos se rompe.

XAML:

      

Code-Behind para la ventana:

 public partial class Window1 : Window { public Window1() { Number= 15; InitializeComponent(); } public int Number { get; set; } } 

Esto establece el número de protocolo en cero, ignorando el valor establecido en Número.

He leído un ejemplo

si miras la ventana de salida, deberías ver la excepción vinculante.

El problema que tiene es el siguiente: dentro de su control de usuario vinculará la etiqueta al Número de protocolo DP de su control de usuario y no al DataContext , por lo que debe agregar, por ejemplo, el nombre del elemento al enlace.

    (...)  

EDITAR: para aclarar algunas cosas, tu usercontrol también funciona si cambias el enlace en tu MainWindow. pero debe vincular al DataContext de MainWindow con RelativeSource.

   

Lo que tienes en efecto:

  

=> No configure el DataContext en las declaraciones de UserControl , use los enlaces RelativeSource o ElementName lugar.

Si no especifica el RelativeSource del enlace, intente configurar DataContext en el constructor:

  public Window1() { Number= 15; DataContext = this; InitializeComponent(); }