【发布时间】:2009-07-12 23:35:22
【问题描述】:
我正在将我的实体绑定到 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。)
【问题讨论】:
-
它不会为你做这件事,但你没有任何理由不能实现所有逻辑来跟踪原始值并保持实体同步。使用大型模型可能会很乏味,但应该可以。
-
是的,它会工作,但它也会非常乏味。另一个选项也是如此,您可以在其中查看 DataContext 中的未决更改。但由于 L2S 不引用其 DataContext,因此您必须将其构建(可能不是一个好主意),或者您必须从外部检查实体......
标签: wpf linq-to-sql binding dirty-data