我如何添加一个“IsDirty”属性的LINQ to SQL的实体?(How can I add a

2019-06-25 17:21发布

我结合我的实体在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的实体连接到。)

Answer 1:

如果您使用的是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; }
}


文章来源: How can I add an “IsDirty” property to a LINQ to SQL entity?