0

こんにちは、データフォームを介して新しいアイテムを追加できない理由を理解するのを手伝ってくれることを願っています.

私のデータフォームでは、EditNewItemTemplateを定義しました。適切なコマンド ボタンを表示しています。「+」追加ボタンがフォームに表示されます。ただし、常にグレー表示されており、新しいアイテムを追加できません。

DataForm の横にある DataGrid で選択した項目にデータをバインドしています。既存のデータを更新できます。つまり、アイテムの名前を変更できます。しかし、新しいものを追加することはできません。コントロールが読み込まれると、バインドされたデータが EF コンテキストから読み込まれます。

自分の Country クラスを説明する必要があるかどうか疑問に思っています。私は、EFが挿入を処理できるはずだと考えています。

私は非常に基本的な何かが欠けているようです。どんなアイデア/リソースも役に立ちます。ありがとうございました。

DataForm の My 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)
4

1 に答える 1

0

IEditableObject を実装していない LoadOperation.Entities プロパティにバインドしています。追加ボタンを有効にするには、IEditableObject を実装する必要があります。

于 2011-02-01T18:13:09.807 に答える