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 )。里面,没有那么多。

我在这里有什么选择?


编辑:我认为这里没有一个好的解决方案,因此欢迎提出解决方法的建议。

(好吧,存在类似的问题,但它们都是关于如何从实体本身外部确定这一点并使用实体所附加的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 回答