如何将“IsDirty”属性添加到LINQ to SQL实体?

时间:2009-07-12 23:35:23

标签: wpf linq-to-sql binding dirty-data

我将我的实体绑定到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>

这个例子只打印出“我是肮脏的吗?是的”还是“我是不是很脏?没有”,但你明白了。

为此,我需要将公共属性添加到(部分类,简单),以确定实体是否脏了。这是艰难的一点。

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

在实体之外,它非常简单(只要您附加了 DataContext 实体)。在里面,没有那么多。

我有什么选择?


编辑:我认为这里没有一个好的解决方案,所以欢迎提供变通方法的建议。

(好的,存在类似的问题,但它们都是关于如何从实体本身的外部确定这一点并使用附加实体的 DataContext 。)

1 个答案:

答案 0 :(得分: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; }
}
相关问题