Silverlight数据绑定 - 可以暂时挂起

时间:2009-12-15 21:05:17

标签: .net silverlight data-binding controls

我有一组绑定到对象的Siverlight元素。我希望能够暂停数据绑定(有效冻结其当前值)一段时间(当鼠标悬停在包含的面板上时)。

最好的方法是什么?似乎没有一种简单的方法 - 一种想法是创建数据对象的副本,并在暂停期间将DataContext设置为 - 但这意味着确保我复制所有数据对象的状态。

2 个答案:

答案 0 :(得分:0)

不确定您的整个场景是什么,但这对我来说听起来像是一个纯粹的UI挑战。为什么不使用WriteableBitmap创建UI的临时副本?

答案 1 :(得分:0)

您的解决方案可能取决于您是否要修改数据对象本身的定义。如果可以修改数据对象,则可以添加一个控制是否允许更新的标志。然后,您可以设置此属性以响应悬停事件。此外,任何属性更改事件将在重新打开更新后排队并触发(假设这是您想要的行为)。

如果你无法修改对象,可以考虑在它周围创建一个包装来支持它。

以下是如何延迟事件的示例:

class DataObject
{
    private bool _canUpdate = true;
    List<string> propertiesChangedDelayed = new List<string>();

    public bool CanUpdate
    {
        get { return _canUpdate; }
        set
        {
            if (value != _canUpdate) {
                _canUpdate = value;
                if (_canUpdate)
                    NotifyPropertyChangedDelayed();
            }
        }
    }

    protected void NotifyPropertyChanged(string property)
    {
        if (CanUpdate) {
            // fire event
        } else {
            propertiesChangedDelayed.Add(property);
        }
    }

    private void NotifyPropertyChangedDelayed()
    {
        foreach (string property in propertiesChangedDelayed)
        {
            NotifyPropertyChanged(property);
        }
        propertiesChangedDelayed.Clear();
    }
}