2010-12-09 2 views
0

안녕 내 데이터 형식을 통해 새 항목을 추가 할 수없는 이유를 알면 도움이되기를 바랍니다.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) 

답변

0

. 추가 단추를 사용하려면 IEditableObject를 구현해야합니다.