2014-09-05 2 views
1

У меня есть WPF приложение, в котором я использую Entity Framework.Расширение свойства автоматически генерируемого класса по структуре сущности

коллекция, которая связана с DataGrid представляет собой набор автогенерируемых классов таблицы, порожденной Entity Framework.

Модель

(автоматически генерируется Entity Framework)

public partial class tblTest 
{ 
    public tblTest() 
    { 
    } 

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

ViewModel

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

Да, вы можете сделать это, добавив новую часть в автоматически генерируемых класса, как правило, в новом файле:

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

Секрет является partial ключевое слово, которое инструктирует компилятор, что весь класс можно разделить на несколько исходных файлов.


EDIT: Вы можете обрабатывать 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 }; 
} 

Это будет запускаться каждый раз, когда пользователь желает добавить новый элемент, введя режим редактирования последней пустой строки.

+0

Но будет ли этот конструктор вызываться по умолчанию? – perplexedDev

+0

@perplexedDev Я отредактировал свой ответ. Поэтому вам не нужен параметризованный конструктор. – Pragmateek

Смежные вопросы