【问题标题】:WPF: Is it possible to call BeginEdit (IEditableObject) automatically when the binding source is updated?WPF:是否可以在更新绑定源时自动调用 BeginEdit (IEditableObject)?
【发布时间】:2010-02-18 15:39:13
【问题描述】:

我有一个实现 IEditableObject 的类,现在我想知道是否可以在绑定源更新时自动调用 BeginEdit()?

有两种可能的情况:

  1. 对象通过数据库填充。在这种情况下,我不想调用 BeginEdit()。
  2. 对象由用户通过输入字段填充。在这种情况下,我想在更新源时自动调用 BeginEdit()(我使用双向绑定和 INotifyPropertyChanged)。

我正在考虑在属性更改时调用 BeginEdit(),但这与第一种情况不符,因为我不希望在从数据库填充时调用 BeginEdit()。

【问题讨论】:

  • 也许您可以为您的对象实现某种 IsInDataBaseUpdate 属性,并且在设置时不要点击 BeginEdit()?对不起,如果这听起来太愚蠢......也许我错过了什么。
  • @Anvaka:我也在考虑这一点,但这是我试图避免的事情,因为这样做我不会得到我想要的,并且仍然需要设置属性(在这种情况下我可以直接调用 BeginEdit())。我想尽可能自动地调用 BeginEdit() (如果可能的话)。我目前正在考虑使用 BindingGroup.BeginEdit()、转换器或子类 Bidning。

标签: wpf binding ieditableobject


【解决方案1】:

您需要一种方法来确定对象种群的来源。 enum 可能会这样做,然后在您的 PropertyChanged 中,您可以检查导致属性更改的原因,并基于此,您可以调用 BeginEdit() 或不调用。

Enum PopulateSource
{
   Database = 0,
   User
}

现在从数据库更新时,将 Enum 设置为 PopulateSource.Database。当它因用户更改而更改时,您将其设置为PopulateSource.User。现在您可以在 PropertyChanged 中检查此变量的状态,从而确定是否调用 BeginEdit()

【讨论】:

    猜你喜欢
    • 2011-05-25
    • 2011-05-21
    • 2011-04-16
    • 2010-10-13
    • 2011-03-31
    • 2016-04-02
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    相关资源
    最近更新 更多