안녕 내 데이터 형식을 통해 새 항목을 추가 할 수없는 이유를 알면 도움이되기를 바랍니다.SL EF - Toolkit DataForm을 통해 새 레코드를 추가하는 데 문제가 발생했습니다.
내 데이터 형식에서 을 정의했습니다.과 NewItemTemplate을 정의했습니다. 적절한 명령 단추를 표시하고 '+'추가 단추가 양식에 나타납니다. 그러나 항상 회색으로 표시되어 새 항목을 추가하지 않습니다.
DataForm 옆의 DataGrid에서 선택한 항목에 내 데이터를 바인딩하고 있습니다. 기존 데이터를 업데이트 할 수 있습니다. 즉 항목의 이름을 바꿀 수 있습니다. 그러나 새로운 것을 추가 할 수는 없습니다. 컨트롤이로드 될 때 바인딩 된 데이터가 EF 컨텍스트에서로드됩니다.
내 자신의 국가 클래스를 설명해야하는지 궁금합니다. EF가 인서트를 처리 할 수 있어야한다고 생각합니다.
매우 근본적인 것이 빠져있는 것처럼 보입니다. 어떤 아이디어/자원이 도움이 될 것입니다. 고맙습니다. 뒤에 코드에서 데이터를로드
<dataFormToolkit:DataForm x:Name="dfCountry"
CurrentItem="{Binding SelectedItem, ElementName=dgCountry, Mode=TwoWay}"
CommitButtonContent="Save"
CancelButtonContent="Cancel"
AutoEdit="False"
ItemsSource="{Binding Mode=OneWay}"
AutoCommit="True"
LabelPosition="Top"
CommandButtonsVisibility="Edit, Add, Commit, Cancel, Delete"
BeginningEdit="dfCountry_BeginningEdit"
EditEnded="dfCountry_EditEnded"
DeletingItem="dfCountry_DeletingItem"
AddingNewItem="dfCountry_AddingNewItem">
<tk:DataForm.EditTemplate>
<DataTemplate>
<tk:DataField Label="Country">
<TextBox Text="{Binding Path=Name, Mode=TwoWay}" HorizontalAlignment="Stretch" VerticalAlignment="Top" />
</tk:DataField>
</DataTemplate>
</tk:DataForm.EditTemplate>
<tk:DataForm.NewItemTemplate>
<DataTemplate >
<tk:DataField Label="Country" >
<TextBox Text="{Binding Path=CountryName, Mode=TwoWay, ValidatesOnDataErrors=True,ValidatesOnNotifyDataErrors=True}"
HorizontalAlignment="Stretch" VerticalAlignment="Top" />
</tk:DataField>
</DataTemplate>
</tk:DataForm.NewItemTemplate>
</dataFormToolkit:DataForm>
내 절차 :
코드는 DATAFORM에 대한 내 XAML을 다음과 같이. 컨트롤이 인스턴스화 될 때 호출됩니다.
private void LoadData()
{
EntityQuery<Country> qry = ctx.GetCountriesQuery();
LoadOperation<Country> loadOp = ctx.Load(qry);
loadOp.Completed += new EventHandler(loadOp_Completed);
}
void loadOp_Completed(object sender, EventArgs e)
{
LoadOperation<Country> CountryDataLoadResult = (LoadOperation<Country>) sender;
dgCountry.ItemsSource = CountryDataLoadResult.Entities;
}
국가 모델이 내 메타 데이터 클래스에 선언되었습니다. 내 서비스 클래스에서
[MetadataTypeAttribute(typeof(Country.CountryMetadata))]
public partial class Country
{
internal sealed class CountryMetadata
{
private CountryMetadata(){}
public int CountryID { get; set; }
public Nullable<int> CreatedBy { get; set; }
public Nullable<DateTime> CreatedDate { get; set; }
public Nullable<bool> FlagDeleted { get; set; }
public Nullable<int> ModifiedBy { get; set; }
public Nullable<DateTime> ModifiedDate { get; set; }
public string Name { get; set; }
public EntityCollection<Province> Provinces { get; set; }
}
}
나는이 : 당신은 IEditableObject를 구현하지 않는 LoadOperation.Entities 속성에 바인딩
public IQueryable<Country> GetCountries()
public void InsertCountry(Country country)
public void UpdateCountry(Country currentCountry)
public void DeleteCountry(Country country)