2012-07-29 84 views
0

我是WPF的初学者。我尝试绑定从ViewModel嵌套列表视图。在WPF中绑定来自ViewModel的嵌套列表视图

我有两个listview父母和孩子分别。在我的父级listview数据模板想绑定孩子listview它的东西

像asp.net中嵌套gridview。有没有人请帮我解决这个问题。

数据显示,如:

StudentID名称

S101阿扎德

数学3

C#3

这里StudentID,母公司名称列表视图的内容和科目是孩子的ListView含量由StudentID过滤。

感谢,

了Az @ d

回答

1
<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(); 
    } 

我希望这将有助于。

+0

这只是一个例子,你可以保留任何你想要的。 – ethicallogics 2012-07-30 08:09:43

+0

感谢您的回复。实际上,我不喜欢在学生类中保留我的主题标记,而是每次在listview中创建新行时都要阅读此数据。为此,我在列表视图项目模板中使用了一个TextBlock,并在textblock初始化事件中绑定了子列表视图。我在代码中完成的所有工作,但无法捕捉视图模型中的文本块初始化事件。任何关于它的想法或像rowcreated的任何listview事件,我将从视图模型中捕获。 – Azad 2012-07-30 08:11:54

+0

这将是最糟糕的实施。你为什么不把所有的数据全部提取到一起,为什么你想要一个一个的提取数据。 – ethicallogics 2012-07-30 08:17:11