首页 > 解决方案 > 将 UWP DataGrid 绑定到 MVVM 模型的困惑

问题描述

在这个MSDN 教程中,他们使用Model-View-ViewModel [MVVM]将 DataGrid 绑定到使用{x:Bind} 标记扩展的客户列表,如下所示:

<controls:DataGrid x:Name="dataGrid1" 
    Height="600" Margin="12"
    AutoGenerateColumns="True"
    ItemsSource="{x:Bind MyViewModel.Customers}" />

他们有一个Customer类如下:

//backing data source in MyViewModel
public class Customer
{
    public String FirstName { get; set; }
    public String LastName { get; set; }
    public String Address { get; set; }
    public Boolean IsNew { get; set; }

    public Customer(String firstName, String lastName, 
        String address, Boolean isNew)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
        this.Address = address;
        this.IsNew = isNew; 
    }

    public static List<Customer> Customers()
    {
        return new List<Customer>(new Customer[4] {
            new Customer("A.", "Zero", 
                "12 North Third Street, Apartment 45", 
                false), 
            new Customer("B.", "One", 
                "34 West Fifth Street, Apartment 67", 
                false),
            new Customer("C.", "Two", 
                "56 East Seventh Street, Apartment 89", 
                true),
            new Customer("D.", "Three", 
                "78 South Ninth Street, Apartment 10", 
                true)
        });
    }
}

问题MyViewModel:该教程在哪里?

备注:我使用的是最新版本 6.3.1VS2019

标签: c#uwpxbind

解决方案


该教程中的 MyViewModel 在哪里?

MyViewModel应该是一个属性,MainPage.xaml.cs它返回一个类的实例,该类的Customers属性返回一个IEnumerable<Customer>.

{x:Bind}标记扩展似乎没有使用 DataContext 或INotifyPropertyChanged

确实,它不使用 aDataContext而是生成从源属性获取值的代码,并将其设置在标记中指定的目标属性上。这比在运行时使用反射解析绑定路径要快。

INotifyPropertyChanged并且属性更改的通知仍然适用{x:Bind}


推荐阅读