Enlace de propiedad de dependencia en UserControl

Mi solución está implementada en MVVM. La vista es una ventana que aloja un control de usuario. He creado una propiedad de dependencia para este userControl como se muestra a continuación:

public static DependencyProperty ListProperty = DependencyProperty.Register(
      "ItemsList", typeof(List<RequiredClass>), typeof(UsercontrolTest));

public List<RequiredClass> ItemsList
{
    get { return (List<RequiredClass>)GetValue(ListProperty); }
    set
    {
        SetValue(ListProperty, value);
    }
}

Esta propiedad está vinculada a mi propiedad viewmodel (ListOfItems) en xaml:

  <Window x:Class="TestProject.MainWindow"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:Test="clr-namespace:TestProject"
          Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>             
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Test:UserControlTest Grid.Row="0" ItemsList="{Binding Path=ListOfItems}" /> 
        <Button Grid.Row="1" Content="AddItems" Click="Button_Click" />
    </Grid>
</Window>

También he inicializado el contexto de datos de la ventana en código subyacente al modelo de vista. El problema es que el enlace nunca parece suceder y la propiedad set nunca se llama para la propiedad de dependencia. ¿Me estoy perdiendo de algo?

preguntado el 05 de febrero de 12 a las 01:02

1 Respuestas

El sistema de enlace nunca llama a esos captadores y definidores (por lo tanto, nunca debe colocar código adicional allí). La propiedad probablemente se esté configurando, pero a menos que haga algo con ella en el declaración del UserControl no se mostrará nada. p.ej

<UserControl Name="control" ...>
    <ItemsControl ItemsSource="{Binding ItemsList, ElementName=control}" />
</UserControl>

Respondido 05 Feb 12, 05:02

Bang on eso es exactamente lo que estaba sucediendo. Como no puedo poner código en el setter, ¿alguna idea de cómo puedo identificar si mi lista ha cambiado y ejecutar algún código? - Abid Alí

@AabidAli: Podrías usar un ObservableCollection que desencadena un evento al cambiar, aunque no estoy seguro de qué es exactamente lo que intenta hacer ... - media pensión

@ HB Me refiero a un cambio en la propiedad de dependencia. Np lo tengo, solo necesita agregar un metadato de propiedad en la inicialización de dp para manejar el cambio de propiedad. Gracias por tu ayuda - Abid Alí

Tal vez esta respuesta también es útil. - Clemens

@FernandoUrkijoCereceda: se hereda y no desea sobrescribirlo, por lo que apunta al control a través de ElementName. - media pensión

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.