Как добавить свойство IsDirty в сущность LINQ to SQL? - PullRequest
2 голосов
/ 13 июля 2009

Я связываю свои сущности с формой редактирования в 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 , к которому присоединена сущность). Внутри не так много.

Какие у меня есть варианты?


Edit: я не думаю, что есть одно хорошее решение здесь, поэтому предложения для обходных путей приветствуются.

(Хорошо, подобные вопросы существуют, но они все о том, как определить это из вне самой сущности и использовать DataContext , к которой присоединена сущность.)

1 Ответ

5 голосов
/ 13 июля 2009

Если вы используете сгенерированные 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; }
}
...