2

エンティティを WPF の編集フォームにバインドしています。DataTemplate 内で、DataTemplate 内のルート コンテナーの背景色を設定して、変更され、これらの変更がまだデータベースに送信されていないことを示したいと考えています。

これは、私が話していることを示す非常に単純なサンプルです (エラーを許してください)。

<Page ...>
    <Page.DataContext>
        <vm:MyPageViewModel /> <!-- Holds reference to the DataContext -->
    </Page.DataContext>
    <ItemsControl
        ItemsSource = {Binding Items}>
        <ItemsControl.Resources>
            <DataTemplate
                DataType="Lol.Models.Item"> <!-- Item is L2S entity -->
                <!-- In real life, I use styles to set the background color -->
                <TextBlock Text="{Binding IsDirty, StringFormat='Am I dirty? /{0/}'}"/>
            </DataTemplate>
        </ItemsControl.Resources>
    </ItemsControl>
</Page>

この例では、「私は汚れていますか? はい」または「私は汚れていますか? いいえ」と出力されるだけですが、その考えは理解できます。

これを行うには、エンティティがダーティかどうかを判断できるパブリック プロパティをItem (部分クラス、シンプル)に追加する必要があります。これは難しいビットです。

public partial class Item
{
    public bool IsDirty
    {
        get
        {
            throw new NotImplementedException("hurf durf");
        }
    }
}

エンティティの外では、非常に単純です (エンティティが接続されているDataContextがある限り)。内部では、それほどではありません。

ここでのオプションは何ですか?


編集: ここに 1 つの良い解決策があるとは思わないので、回避策の提案を歓迎します。

(同様の質問がありますが、それらはすべて、エンティティ自体の外部からこれを判断し、エンティティが接続されているDataContextを使用する方法に関するものです。)

4

1 に答える 1

5

dbml で生成されたクラスを使用している場合、次のようないくつかの部分メソッドを実装できるはずです。

public partial class SampleEntity
{
    partial void OnCreated()
    {
        this.IsDirty = true;
    }

    partial void OnLoaded()
    {
        this.PropertyChanged += (s, e) => this.IsDirty = true;
        this.IsDirty = false;
    }

    public bool IsDirty { get; private set; }
}
于 2009-07-13T00:31:58.243 に答える