SL EF - проблема с добавлением новой записи через инструментарий DataForm - PullRequest
0 голосов
/ 09 декабря 2010

Привет. Надеюсь, вы поможете мне понять, почему я не могу добавлять новые элементы через свою форму данных.

В своей форме данных я определил Редактировать и NewItemTemplate .Я показываю правильные кнопки команд, и в форме появляется кнопка «+».Тем не менее, он всегда отображается серым цветом и не позволит мне добавить новый элемент.

Я связываю свои данные с выбранным элементом в DataGrid рядом с DataForm.Я могу обновить существующие данные, т.е. переименовать элемент.Но не могу добавить новые.Связанные данные загружаются из контекста EF при загрузке элемента управления.

Мне интересно, нужно ли мне описывать свой собственный класс Country;Я полагаю, что EF должен уметь обрабатывать вставки.

Кажется, мне не хватает чего-то очень фундаментального.Любые идеи / ресурсы будут полезны.Спасибо.

Код следующий Мой XAML для 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>

Моя процедура загрузки данных в коде позади.Он вызывается при создании экземпляра элемента управления.

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)

1 Ответ

0 голосов
/ 01 февраля 2011

Вы связываетесь со свойством LoadOperation.Entities, которое не реализует IEditableObject. Для включения кнопки добавления требуется реализация IEditableObject.

...