2012-07-29 59 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