Привязка данных Silverlight - возможна ли временная приостановка - PullRequest
0 голосов
/ 16 декабря 2009

У меня есть группа элементов Siverlight, которые связаны с объектом. Я хочу иметь возможность приостановить привязку данных (эффективно заморозить их текущие значения) на некоторое время (когда мышь наводит указатель мыши на содержащую панель).

Какой лучший способ сделать это? Кажется, не существует простого способа - одна мысль состоит в том, чтобы создать копию объекта данных и установить значение DataContext на это во время приостановки - но это будет означать, что я обязательно скопирую все состояние объекта данных.

Lee

Ответы [ 2 ]

0 голосов
/ 16 декабря 2009

Ваше решение, вероятно, будет зависеть от того, хотите ли вы изменить определение самого объекта данных. Если вы можете изменить объект данных, то вы можете добавить флаг, который контролирует, разрешено ли обновление. Затем вы можете установить это свойство в ответ на событие hover. Кроме того, любые события изменения свойств будут помещаться в очередь и запускаться после повторного включения обновлений (при условии, что вам нужно именно такое поведение).

Если вы не можете изменить объект, рассмотрите возможность создания вокруг него оболочки, поддерживающей это.

Вот пример того, как отложить события:

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();
    }
}
0 голосов
/ 16 декабря 2009

Не уверен, что весь ваш сценарий, но это звучит как вызов чистого пользовательского интерфейса для меня. Почему бы не создать временную копию вашего пользовательского интерфейса с помощью WriteableBitmap?

...