按实体框架扩展属性自动生成的类

时间:2014-09-05 18:40:19

标签: c# wpf entity-framework datagrid

我有一个 WPF 应用程序,我使用实体框架

绑定到DataGrid的集合是实体框架生成的表格的自动生成的类的集合。

型号

(由实体框架自动生成)

public partial class tblTest
{
    public tblTest()
    {
    }

    public int TestId{get;set;}
    public string TestName {get;set;}
    public string UpdatedBy {get;set;}
}

视图模型

private ObservableCollection<tblTest> _objTest; 

public ObservableCollection<tblTest> TestList
{
     get { return _objTest; }
     set { _objTest; = value;}
}

XAML

<DataGrid Name="grdTest" ItemSource="{Binding Path=TestList,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}
AutoGenerateColumns="False" CanUserAddRows="True">
    <Datagrid.Columns>
    <DataGridTextColumn Width="140">
        <DataGridTextColumn.Binding>
            <Binding Path="TestName" Mode="TwoWay" >
                <Binding.ValidationRules>
                    <localVal:ValidationRules/>
                </Binding.ValidationRules>                           
            </Binding>
        </DataGridTextColumn.Binding>                                        
        <DataGridTextColumn.Header>
            <TextBlock Width="128" Text="Test Name" ToolTip="Enter name"/>
        </DataGridTextColumn.Header>
    </DataGridTextColumn>

    <DataGridTextColumn Width="140">
        <DataGridTextColumn.Binding>
            <Binding Path="UpdatedBy" Mode="TwoWay" >
                <Binding.ValidationRules>
                    <localVal:ValidationRules/>
                </Binding.ValidationRules>                           
            </Binding>
        </DataGridTextColumn.Binding>                                        
        <DataGridTextColumn.Header>
            <TextBlock Width="128" Text="Updated By" ToolTip="Name of the user that updated the record"/>
        </DataGridTextColumn.Header>
    </DataGridTextColumn>
    </Datagrid.Columns>
</DataGrid>

我允许用户在DataGrid中添加新行,当DataGrid中添加新的空行时,我希望当前用户自动生成UpdatedBy列凭证(并且只读)。

是否有办法扩展测试表的模型类以编写构造函数以获取更新的当前用户详细信息。或者有不同的方法吗?

1 个答案:

答案 0 :(得分:1)

是的,您可以通过向自动生成的类添加新部件来完成此操作,通常是在新文件中:

public partial class tblTest
{
    public tblTest(string updatedBy)
    {
        this.UpdatedBy = updatedBy;
    }
}

秘密是partial关键字,它指示编译器整个类可以拆分为多个源文件。


编辑:你可以处理AddingNewItem事件来做你想做的事情:

在XAML中:

<DataGrid ... AddingNewItem="DataGrid_AddingNewItem" ...>
...
<DataGridTextColumn Width="140" IsReadOnly="True">

在背后的代码中:

private void DataGrid_AddingNewItem(object sender, AddingNewItemEventArgs e)
{
    e.NewItem = new tblTest { UpdatedBy = Environment.UserName };
}

每次用户愿意添加新项目时,都会触发它,方法是进入最后一个空行的编辑模式。