elemento seleccionado del cuadro de lista de la plantilla de datos

aquí está mi xaml:

<Window x:Class="WpfTest.Search"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Search" Height="600" Width="1024">

    <Window.Resources>
        <DataTemplate x:Key="listBoxTemplate" xmlns:ns="clr-namespace:MyConverters">
            <StackPanel Orientation="Horizontal">
                <StackPanel.Resources>
                    <ns:ImageConverter x:Key="MyImageConverter" />
                </StackPanel.Resources>
                <Image Source="{Binding Path=thumb, StringFormat=/WpfTest;component/Images/{0}, Converter={StaticResource MyImageConverter}}" Height="100" Width="130" Margin="5"></Image>
                <StackPanel Orientation="Vertical" Width="247">
                    <TextBlock Text="{Binding recipeName}" Height="60" Padding="15" FontSize="16" HorizontalAlignment="Stretch" VerticalAlignment="Center"></TextBlock>
                    <TextBlock Text="{Binding cuisine}" Height="60" Padding="15" FontSize="16" HorizontalAlignment="Stretch" VerticalAlignment="Center"></TextBlock>
                </StackPanel>
            </StackPanel>
        </DataTemplate>
    </Window.Resources>

    <Grid>
        <ListBox Margin="12,96,0,0" Name="lstSearchResult" HorizontalAlignment="Left"
                 VerticalAlignment="Top" Width="704" Height="445" ItemsSource="{Binding Tables[0]}" ItemTemplate="{StaticResource listBoxTemplate}" SelectionChanged="lstSearchResult_SelectionChanged">
        </ListBox>
        <TextBox Height="31" HorizontalAlignment="Left" Margin="12,49,0,0" Name="txtSearchRecipe" VerticalAlignment="Top" Width="518" FontSize="16" />
        <Button Content="Search" Height="31" HorizontalAlignment="Left" Margin="555,49,0,0" Name="btnSearchRecipe" VerticalAlignment="Top" Width="161" Click="btnSearchRecipe_Click" />
    </Grid>
</Window>

ahora quiero abrir un nuevo formulario basado en el elemento en el que hice clic en el cuadro de lista, pasando al nuevo formulario los datos del bloque de texto del elemento seleccionado. ¿Cómo puedo hacer eso?

preguntado el 22 de mayo de 12 a las 16:05

1 Respuestas

Si estoy leyendo esto correctamente, no necesita hacer nada especial para acceder a los controles de TextBlock en DataTemplate. Solo necesita aprovechar sus enlaces agregando un enlace SelectedItem usando el enlace TwoWay a su ListBox.

Si está utilizando MVVM, le sugiero que asigne un comando en su evento de clic de botón a su modelo de vista pasando el elemento seleccionado como parámetro de comando. Luego, en el controlador de comandos, convierta el SelectedItem al tipo que espera (este debería ser el tipo de objeto en la colección que ha vinculado a su ListBox ItemsSource). Luego puede enviar las propiedades vinculadas a TextBlocks al modelo de vista de su nueva ventana. Si se configura correctamente, estos elementos deberían existir en su SelectedItem. Luego establezca el contexto de datos de la ventana en el modelo de vista de ventana correspondiente y muéstrelo.

Si solo está usando el código subyacente, simplemente convierta el SelectedItem al tipo usado en la colección ListBox ItemsSource. Luego pase las propiedades vinculadas a TextBlocks a la nueva ventana. Luego muestra la ventana.

contestado el 22 de mayo de 12 a las 17:05

no estoy usando MVVM ... ¿qué quiere decir con "simplemente convierta el elemento seleccionado en el tipo utilizado en la colección ListBox ItemsSource? Luego pase las propiedades vinculadas a TextBlocks a la nueva ventana". - estoy dentro

solo uso el método aquí windowsphonegeek.com/tips/… y ahora funciona. de todos modos, aceptaré tu respuesta como la correcta porque técnicamente es correcta, aunque también es demasiado básica para mi gusto;) - estoy dentro

Si vincula su elemento seleccionado en un objeto ubicado en el código subyacente, puede acceder a las propiedades vinculadas a los bloques de texto en su DataTemplate. Su colección ListBox ItemsSource está vinculada a una colección genérica. El tipo utilizado en esa colección genérica sería el tipo para el elemento seleccionado. Entonces, si está usando un ObservableCollection y vincula su ListBox SelectedItem a un objeto de tipo MyObjectType llamado MySelectedItem, cuando maneja el clic, puede convertir el SelectedItem en MyObjectType. El resultado tendría el nombre de la receta y la cocina de los miembros. - Josh

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