2010-12-09 9 views
0

Hallo Ich hoffe, Sie können mir helfen, herauszufinden, warum ich keine neuen Elemente über meine Datenform hinzufügen kann.SL EF - Problem beim Hinzufügen neuer Datensatz über Toolkit DataForm

In meiner Datenform habe ich definiert einen bearbeiten und NewItemTemplate. Ich zeige die richtigen Befehlsschaltflächen und die Schaltfläche "+" wird auf meinem Formular angezeigt. Es ist jedoch immer ausgegraut und lässt mich keinen neuen Artikel hinzufügen.

Ich verbinde meine Daten mit dem ausgewählten Element in einem DataGrid neben dem DataForm. Ich bin in der Lage, vorhandene Daten zu aktualisieren, d. H. Den Artikel umzubenennen. Kann aber keine neuen hinzufügen. Die verknüpften Daten werden beim Laden des Steuerelements aus dem EF-Kontext geladen.

Ich frage mich, ob ich meine eigene Country-Klasse beschreiben muss; Ich denke, EF sollte in der Lage sein, die Einsätze zu handhaben.

Es scheint, dass ich etwas sehr grundlegendes vermisse. Irgendwelche Ideen/Ressourcen wären hilfreich. Vielen Dank.

-Code wie folgt Meine XAML für das Dataform:

<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> 

Meine Prozedur hinter Daten im Code zu laden. Es wird aufgerufen, wenn das Steuerelement instanziiert wird.

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; 
    } 

Das Ländermodell ist in meiner Metadatenklasse deklariert.

[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; } 
    } 
} 

In meiner Dienstklasse I haben:

public IQueryable<Country> GetCountries() 
public void InsertCountry(Country country) 
public void UpdateCountry(Country currentCountry) 
public void DeleteCountry(Country country) 

Antwort

0

Sie auf die LoadOperation.Entities Eigenschaft verbindlich sind, die IEditableObject nicht implementiert. Die Implementierung von IEditableObject ist erforderlich, damit die Schaltfläche zum Hinzufügen aktiviert wird.

Verwandte Themen