Evento SelectedItem en Listbox WPF C#

 C Programming >> Programación C >  >> Tags >> WPF
Evento SelectedItem en Listbox WPF C#

La solución para el evento SelectedItem en Listbox WPF C#
se proporciona a continuación:

Quiero ver un evento cuando RadioButton está marcado en un ListBox , estoy tratando de usar el evento selectionChanged pero se retrasó mucho y no fue efectivo. Hay alguna otra manera de hacer esto? ¡Muchas gracias!

<ListBox SelectionChanged="lstPlotter_SelectionChanged_1" x:Name="lstPlotter"  Style="{StaticResource 0009}">
    <RadioButton Content="DWG To PDF.pc3" Style="{StaticResource 0004}" IsChecked="True"/>
    <RadioButton Content="AutoCAD PDF (High Quality Print).pc3" Style="{StaticResource 0004}"/>
    <RadioButton Content="AutoCAD PDF (General Documentation).pc3" Style="{StaticResource 0004}"/>
    <RadioButton Content="AutoCAD PDF (Smallest File).pc3" Style="{StaticResource 0004}"/>
    <RadioButton Content="AutoCAD PDF (Web and Mobile).pc3" Style="{StaticResource 0004}"/>
</ListBox>

Le recomiendo encarecidamente que aprenda a separar los datos y su presentación (vista).
Todo el concepto de WPF se basa en esta separación.
Al no separarlos, se crea muchos problemas.

En esta tarea, sus datos son una colección de cadenas contenidas en RadioButton.Content.
Esta colección de cadenas debe pasarse a la fuente ListBox.
En la plantilla del elemento ListBox, debe pasar el Plantilla de datos para el elemento de la colección de la fuente.
Es decir, para este caso, para la cadena.
Es en esta plantilla de datos donde debe configurar un botón de opción que representará una cadena de la colección.
El RadioButton debe vincularse a la propiedad IsSelected del ListBoxItem que lo contiene.

    <UniformGrid Background="AliceBlue" Columns="1">
        <FrameworkElement.Resources>
            <Style x:Key="0004"/>
            <Style x:Key="0009"/>
            <spec:StringCollection x:Key="ListBox.SourceItem">
                <sys:String>DWG To PDF.pc3</sys:String>
                <sys:String>AutoCAD PDF (High Quality Print).pc3</sys:String>
                <sys:String>AutoCAD PDF (General Documentation).pc3</sys:String>
                <sys:String>AutoCAD PDF (Smallest File).pc3</sys:String>
                <sys:String>AutoCAD PDF (Web and Mobile).pc3</sys:String>
            </spec:StringCollection>
            <DataTemplate x:Key="ListBox.ItemTemplate"
                          DataType="{x:Type sys:String}">
                <RadioButton GroupName="_listBox"
                             Content="{Binding}"
                             IsChecked="{Binding IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListBoxItem}}"
                             Style="{DynamicResource 0004}"/>
            </DataTemplate>
        </FrameworkElement.Resources>
        <TextBlock x:Name="tBlock"/>
        <ListBox x:Name="lstPlotter"
                 SelectionChanged="lstPlotter_SelectionChanged_1"
                 Style="{DynamicResource 0009}"
                 ItemTemplate="{DynamicResource ListBox.ItemTemplate}"
                 ItemsSource="{DynamicResource ListBox.SourceItem}"
                 SelectedIndex="0"
                 SelectionMode="Single"/>
    </UniformGrid>
        private void lstPlotter_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
        {
                tBlock.Text = ((ListBox)sender).SelectedItem?.ToString();
        }