📜  MVVM – WPF数据模板

📅  最后修改于: 2020-11-19 05:23:23             🧑  作者: Mango


模板描述了控件的整体外观和视觉外观。对于每个控件,都有一个与之关联的默认模板,该模板为该控件提供外观。在WPF应用程序中,当您要自定义控件的视觉行为和外观时,可以轻松创建自己的模板。逻辑和模板之间的连通性可以通过数据绑定来实现。

在MVVM中,还有另一种主要形式,称为ViewModel first构造。

  • ViewModel的第一种构造方法利用WPF中的隐式数据模板的功能。

  • 隐式数据模板可以自动从当前资源字典中为使用数据绑定的元素选择适当的模板。它们基于由数据绑定呈现的数据对象的类型来执行此操作。首先,您需要具有一些绑定到数据对象的元素。

让我们再次看一下我们的简单示例,在该示例中,您将了解如何首先利用数据模板(尤其是隐式数据模板)来查看模型。这是我们的StudentViewModel类的实现。

using MVVMDemo.Model; 
using System.Collections.ObjectModel;

namespace MVVMDemo.ViewModel { 

   public class StudentViewModel {
    
      public StudentViewModel() { 
         LoadStudents(); 
      } 
        
      public ObservableCollection Students { 
         get; 
         set; 
      }
        
      public void LoadStudents() { 
         ObservableCollection students = new ObservableCollection();
            
         students.Add(new Student { FirstName = "Mark", LastName = "Allain" }); 
         students.Add(new Student { FirstName = "Allen", LastName = "Brown" }); 
         students.Add(new Student { FirstName = "Linda", LastName = "Hamerski" }); 
            
         Students = students; 
      } 
   } 
}

您可以看到上面的ViewModel保持不变。我们将继续上一章中的相同示例。该ViewModel类仅公开Student系列属性,并在构造时填充该属性。让我们转到StudentView.xaml文件,删除现有的实现并在“参考资料”部分中定义一个数据模板。

 
   
    
       
          
                
          
                
          
       
        
    

现在添加一个列表框,并将该列表框的数据绑定到Student属性,如下面的代码所示。


在“资源”部分中,DataTemplate具有一个“ studentsTemplate”键,然后要实际使用该模板,我们需要使用ListBox的ItemTemplate属性。现在,您可以看到我们指示列表框使用该特定模板来渲染这些学生。以下是StudentView.xaml文件的完整实现。


    
    
       
        
          
             
                    
             
                    
             
                    
          
            
       
   
    
    
       
   
    

编译并执行上述代码后,您将看到以下窗口,其中包含一个ListBox。每个ListBoxItem包含显示在TextBlock和Text框中的Student类对象数据。

WPF数据模板主窗口

要使其成为隐式模板,我们需要从列表框中删除ItemTemplate属性,并在我们的模板定义中添加DataType属性,如以下代码所示。

 
   
    
       
          
                
          
                
          
                
       
        
    

 
 
    

在DataTemplate中,x:Type标记扩展非常重要,就像XAML中的一种运算符一样。因此,基本上,我们需要指向MVVMDemo.Model命名空间中的Student数据类型。以下是更新的完整XAML文件。


    
    
       
        
          
             
                    
             
                    
             
                    
          
            
       
   
    
   
       
    
    

当您再次运行该应用程序时,您仍将获得带有数据模板的Students呈现,因为它通过找到适当的DataTemplate自动映射要呈现的对象的类型。

资料范本

我们建议您以逐步的方法执行上面的示例,以更好地理解。