Хотя можно получить данные из DataTemplateColumn , это не самый простой и надежный способ получить то, что вы хотите.
Итак, насколько я понимаю, у вас есть что-то например, как ваш DbContext
public class RoomType
{
[Key]
int _RoomTypeId { get; set; }
string Name { get; set; }
}
public class RoomData
{
[Key]
int Id { get; set; }
RoomType RoomType { get; set; }
int ApRate { get; set; }
int MapRate { get; set; }
}
public class RoomsDbContext : DbContext
{
public DbSet<RoomType> _RoomTypes {get;}
public DbSet<RoomData> _RoomDatas {get;}
}
Тогда в своем коде вы можете установить для свойства DataSrid DataSrid значение
var newRoomDataList = db
._RoomTypes
.Select(s =>
new RoomData
{
RoomType = s
})
.ToList();
McDataGrid.ItemsSource = newRoomDataList;
И просто привязать RoomData
свойства непосредственно в представлении
<DataGrid.Columns>
<DataGridTextColumn Header="Room Types" Binding="{Binding RoomType.Name}"/>
<DataGridTemplateColumn Header="AP Rate" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox x:Name="AP_Rate" Binding="{Binding ApRate}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Тогда в обработчике события OnClick кнопки Add вы можете просто
public void OnAddDataClick(object sender, RoutedEventArgs e)
{
var newRoomDataList = (IEnumerable<RoomData>)((DataGrid)sender).DataSource;
db._RoomDatas.AddRange(newRoomDataList);
db.SaveChanges();
}
PS: хотя это должно работать (за исключением некоторых незначительных опечаток и упущений), это не лучший подход. Как только вы разберетесь с WPF, я рекомендую вам начать чтение по шаблону MVVM .
PS2: Кроме того, я рекомендую вам немного прочитать о наименованиях C# , поскольку текущее наименование немного необычно, и может быть лучше рассмотреть возможность использования более стандартной схемы именования.