假设我有一个域模型,例如:
class User {
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleName { get; set; }
public int Age { get; set; }
// tons of other stuff
}
我有一个ObservableCollection
称为UserList
,我将其绑定到 DataGrid ,如下所示:
<dg:DataGrid ItemsSource="{Binding Path=UserList}" SelectedIndex="{Binding Path=Selecteduser}">
<dg:DataGrid.Columns>
<dg:DataGridTextColumn Header="Name" Binding="{Binding Path=FirstName, Mode=OneWay}" />
<dg:DataGridTextColumn Header="Age" Binding="{Binding Path=Age, Mode=OneWay}" />
</dg:DataGrid.Columns>
</dg:DataGrid>
现在我决定为用户的全名添加一个网格列。我的User
对象没有这个属性,但是如果你给我一个User
对象,它很容易计算出来。如何在我的User
对象上绑定到这样的派生“属性”,而无需创建代理类(也称为视图模型)User
并重写大量代码来处理此代理、将状态从域对象复制到代理对象等?
一个相当干净和明显的解决方案将是一个扩展方法,但显然你不能绑定到它。
我只是想告诉网格:对于这个列,给我一个用户和一些指示这是什么的键(例如“全名”),我会将数据传回给你用于该列。