Привет. Надеюсь, вы поможете мне понять, почему я не могу добавлять новые элементы через свою форму данных.
В своей форме данных я определил Редактировать и 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)