Vincular vista de lista anidada de ViewModel en WPF

Soy principiante en WPF. Estoy intentando vincular la vista de lista anidada de ViewModel.

Tengo dos listview padre e hijo respectivamente. En mi plantilla de datos de vista de lista principal, quiero vincular la vista de lista secundaria, es algo

como gridview anidado en asp.net. ¿Alguien podría ayudarme a resolver este problema?

Visualización de datos como:

Nombre del ID del estudiante

S101 Azad

matemáticas 3

do#3

Aquí Id. de estudiante, el nombre del contenido principal de la vista de lista y los temas son contenido de la vista de lista secundaria que se filtra por Id. de estudiante.

Gracias,

Az@d

preguntado el 29 de julio de 12 a las 06:07

1 Respuestas

    <Grid>
    <ListView ItemsSource="{Binding Students}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="2"/>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="5"/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="{Binding Name}" Grid.Column="0"/>
                    <TextBlock Text="{Binding RollNo}" Grid.Column="2"/>
                    <ListView ItemsSource="{Binding SubjectAndMarks}" Grid.Row="2" Grid.ColumnSpan="2" Grid.Column="0" BorderThickness="0">
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto"/>
                                        <ColumnDefinition Width="5"/>
                                        <ColumnDefinition Width="Auto"/>
                                    </Grid.ColumnDefinitions>
                                    <TextBlock Text="{Binding Subject}" Grid.Column="0"/>
                                    <TextBlock Text="{Binding Marks}" Grid.Column="2"/>
                                </Grid>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>

    public class SubjectAndMarks 
{
    public string Subject { get; set; }
    public double Marks { get; set; }
}
public class Student 
{
    public string Name { get; set; }
    public int RollNo { get; set; }
    public ObservableCollection<SubjectAndMarks> SubjectAndMarks { get; set; }
}
public class ViewModel //ViewModel
{
     public ObservableCollection<Student> Students { get; set; }
    public ViewModel()
    {
        Students = new ObservableCollection<Student>();
        Students.Add(new Student()
        {
            Name = "Harish",
            RollNo = 1,
            SubjectAndMarks = new ObservableCollection<SubjectAndMarks>()
        {new SubjectAndMarks(){Subject="Maths",Marks=100},new SubjectAndMarks(){Subject="Hindi",Marks=100},
        new SubjectAndMarks(){Subject="Science",Marks=100}}
        });
        Students.Add(new Student()
        {
            Name = "Pankaj",
            RollNo = 2,
            SubjectAndMarks = new ObservableCollection<SubjectAndMarks>()
        {new SubjectAndMarks(){Subject="Maths",Marks=100},new SubjectAndMarks(){Subject="Hindi",Marks=40},
        new SubjectAndMarks(){Subject="Science",Marks=30}}
        });
        Students.Add(new Student()
        {
            Name = "Deepak",
            RollNo = 3,
            SubjectAndMarks = new ObservableCollection<SubjectAndMarks>()
        {new SubjectAndMarks(){Subject="Maths",Marks=90},new SubjectAndMarks(){Subject="Hindi",Marks=50},
        new SubjectAndMarks(){Subject="Science",Marks=60}}
        });
    } 
}
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new ViewModel();   
    }

Espero que le ayudará.

Respondido 29 Jul 12, 08:07

Este es solo un ejemplo, puedes quedarte con lo que quieras. - yo chauhan

Gracias por su respuesta. En realidad, no me gusta mantener mis Marcas de sujeto dentro de la clase Estudiante, sino que me gustaría leer estos datos cada vez que se crea una nueva fila en la vista de lista. Para hacer esto, tomé un TextBlock dentro de la plantilla de elemento de vista de lista y en el evento de inicialización de bloque de texto vinculé la vista de lista secundaria. Todo el trabajo que hice en el código está detrás, pero no puedo capturar el evento inicializado del bloque de texto en el modelo de vista. alguna idea al respecto o cualquier evento de vista de lista como creación de filas que captaré del modelo de vista. - Azad

Esa será la peor implementación. ¿Por qué no obtiene todos los datos juntos? ¿Por qué desea obtener los datos uno por uno? - yo chauhan

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