2010-12-09 57 views
0

嗨 我希望你能帮我弄清楚为什么我不能通过我的数据表添加新项目。SL EF - 通过工具包添加新记录的问题DataForm

在我的数据形我已经定义了一个编辑NewItemTemplate。我正在显示正确的命令按钮,'+'添加按钮显示在我的表单上。但是,它始终变灰,并且不会让我添加新项目。

我将数据绑定到DataForm旁边的DataGrid中的选定项。我可以更新现有数据,即重命名该项目。但不能添加新的。绑定的数据在加载控件时从EF上下文加载。

我想知道是否需要描述我自己的国家班;我想EF应该能够处理插入。

看来我很想念一些非常基础的东西。任何想法/资源都会有所帮助。谢谢。

代码如下 我对数据形XAML:

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

我的程序中的代码来加载数据的后面。它在控件实例化时被调用。

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

Country模型在我的元数据类中声明。

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

在我的服务类,我有:

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

回答

0

您绑定到LoadOperation.Entities属性,它没有实现IEditableObject。要启用添加按钮,需要实现IEditableObject。