Silverlight: Adjuntar eventos a elementos dentro de un ItemsControl

Estoy tratando de vincular eventos a mis botones de radio que residen en un control de elementos.

Mi plantilla está a continuación:

<ItemsControl x:Name="RadioButtonsItemsControl" Height="auto" Width="auto" ItemsSource="{TemplateBinding MapLayers}" >

                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>

                                <StackPanel Orientation="{TemplateBinding RadioButtonOrientation}" Margin="5"/>
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>

                        <ItemsControl.ItemTemplate>
                            <DataTemplate>

                                <RadioButton Content="{Binding ID}" IsChecked="{Binding Visible, Mode=TwoWay}"
                                    IsEnabled = "{Binding IsInScaleRange}"
                                    ToolTipService.ToolTip=""
                                    GroupName="BaseLayer"
                                    Foreground="{TemplateBinding ForeGroundBrush}" FontSize="11">

                                </RadioButton>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>

En mi archivo .cs para el control personalizado, tengo una parte de la plantilla para el control de elementos y adjunto el evento

public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();

        radioButtonsItemsControl = GetTemplateChild("RadioButtonsItemsControl") as ItemsControl;
        if (radioButtonsItemsControl != null) radioButtonsItemsControl.MouseLeftButtonDown += radioButtonsItemsControlMouseLeftButtonDown;
    }

radioButtonsItemsControl no es igual a nulo (y aún no se completa con los botones de radio en esta etapa), pero el evento radioButtonsItemsControlMouseLeftButtonDown aún debería registrarse para más adelante cuando haga clic dentro de mi control de elementos.

 void radioButtonsItemsControlMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        RadioButton radioButton = e.OriginalSource as RadioButton;
        if (radioButton != null) radioButton.Checked += OnChecked;
    }

Sin embargo, esto nunca se activa cuando hago clic en mi control de elementos: radioButtonsItemsControlMouseLeftButtonDown.

No estoy seguro de hacerlo de la manera correcta, por lo que estoy abierto a métodos alternativos para adjuntar eventos a elementos dentro de ItemsControls.

Gracias Mike

preguntado el 03 de mayo de 12 a las 18:05

1 Respuestas

En general, para adjuntar el evento, haría una extensión de clase parcial y le daría una tabla hash de comandos a los que podría vincularse. En su caso, la forma más sencilla sería definir un evento que se establece después de vincular la lista. Por ejemplo, la propiedad Visible, en el conjunto verificaría si algún evento está definido y, de ser así, llamarlo. P.ej

Crea un evento para mirar (OnRadioButtonChanged); Adjuntar al evento DESPUÉS de cargar la lista. (separe el evento una vez que la lista se borre para recargar). una vez que existe el evento, cuando se alterna la visibilidad, invocará el respiradero. El ejemplo de código está a continuación:

public string Visibility
    {
        get
        {
            return __fVisibility;
        }
        set
        {
            __fVisibility = value;
            this.NotifyPropertyChanged("Visibility");
            if (!object.ReferenceEquals(OnVisibilityChanged, null))
                OnVisibilityChanged(null);
        }
    }

Esa para mí es la solución más limpia y simple. :)

contestado el 04 de mayo de 12 a las 02:05

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