2010-01-27 22 views
8

Estoy creando un control de usuario para mostrar un calendario de tres meses. El control se basa en el control Calendario de WPF (WPF Toolkit 2009-06) y deseo pasar varias de las propiedades del Calendario a las propiedades correspondientes de mi control de usuario. Las propiedades de control del usuario se configuran como Propiedades de dependencia, y sus tipos subyacentes coinciden con los tipos de las propiedades del Calendario. Aquí está mi marcado:WPF: Colección propiedad de dependencia "es de sólo lectura y no se puede ajustar desde el marcado"

<StackPanel> 
    <toolkit:Calendar Name="MasterCalendar" 
     SelectionMode="{Binding Path=SelectionMode, Mode=OneWay}" 
     SelectedDate="{Binding Path=SelectedDate, Mode=OneWayToSource}" 
     SelectedDates="{Binding Path=SelectedDates, Mode=OneWayToSource}"/> 
    <toolkit:Calendar Name="SlaveCalendar1" 
     DisplayDate="{Binding DisplayDate, Converter={StaticResource IncrementalMonthConverter}, ElementName=MasterCalendar, Mode=OneWay}" 
     SelectionMode="{Binding Path=SelectionMode, Mode=OneWay}" 
     SelectedDate="{Binding Path=SelectedDate, Mode=OneWayToSource}" 
     SelectedDates="{Binding Path=SelectedDates, Mode=OneWayToSource}"/> 
    <toolkit:Calendar Name="SlaveCalendar2" 
     DisplayDate="{Binding DisplayDate, Converter={StaticResource IncrementalMonthConverter}, ElementName=SlaveCalendar1, Mode=OneWay}" 
     SelectionMode="{Binding Path=SelectionMode, Mode=OneWay}" 
     SelectedDate="{Binding Path=SelectedDate, Mode=OneWayToSource}" 
     SelectedDates="{Binding Path=SelectedDates, Mode=OneWayToSource}"/> 
</StackPanel> 

Todas las propiedades se unen sin problemas, a excepción de la propiedad SelectedDates. Obtuve el siguiente error en su enlace:

La propiedad 'SelectedDates' es de solo lectura y no se puede establecer desde el marcado.

Sospecho que es porque la propiedad SelectedDates es una colección, pero no estoy seguro de cómo solucionar el problema. ¿Puede alguien aclararme la causa del problema y sugerir una solución? Gracias por tu ayuda.

Respuesta

2

Si lo entiendo bien, tiene propiedades de Dependencia en su código detrás de esa coincidencia en el nombre y escriba las propiedades de los Controles de calendario en su control de usuario. Está intentando asignar la Colección SelectedDates de los diversos Controles de calendario a la propiedad de Dependencia del mismo nombre en su código.

Usted simplemente puede hacer esto mediante una línea de código:

this.SelectedDates=SlaveCalendar1.SelectedDates

En un manejador de sucesos apropiado que se activa cuando se añade una fecha seleccionada.

Aunque establezca el enlace en OneWayToSource, el código SelectedDates= es una asignación. Como la Propiedad SelectedDates no tiene setter, no es posible escribir este fragmento de código.

Here se puede encontrar un enlace a la documentación del control de calendario

+0

Aquí es donde estoy desconcertado: Si estoy pasando el valor de, por ejemplo, a mi propiedad SlaveCalendar1 control de usuario, sólo estoy leyendo SlaveCalendar1.SelectedDates; Estoy escribiendo en MyUserControl.SelectedDates, que he definido con un setter. En otras palabras, MyUserControl.SelectedDates no es de solo lectura, y eso es a lo que le escribo. ¿Por qué eso no funciona? –

+0

¿Cómo pasas SlaveCalendar1.SelectedDates a this.SelectedDates? Entiendo que lo está haciendo estableciendo el Modo de encuadernación en OneWayToSource. Parece que esta línea de código aún se interpreta como una tarea, para lo cual se necesita un setter. ¡Hay muchas soluciones! – Dabblernl

+1

Entonces, si lo entiendo correctamente, no puedo enlazar una propiedad de solo lectura, incluso si el enlace es OneWayToSource; es decir, un enlace que solo se lee desde la propiedad de solo lectura. Gracias –

Cuestiones relacionadas