2009-12-15 3 views
0

개체에 바인딩 된 Siverlight 요소 그룹이 있습니다. 나는 (마우스가 움직이는 패널을 가리키면) 얼마 동안 databind를 일시 중지 (현재 값을 효과적으로 고정) 할 수 있기를 원합니다.Silverlight 데이터 바인딩 - 임시 일시 중지가 가능합니다

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 쉬운 방법이 아닌 것 같습니다. 한 가지 생각은 데이터 객체의 복사본을 만들고 일시 중단 중에 DataContext를 설정하는 것입니다.하지만 이는 데이터 객체의 상태를 모두 복사하는 것을 의미합니다.

답변

0

전체 시나리오는 무엇인지, 그러나 이것은 나에게 순수한 UI 도전 같은 소리하지 않습니다. WriteableBitmap을 사용하여 UI의 임시 복사본을 만드는 것이 어떻습니까?

+0

감사합니다 - 나는 대화로 UI를 필요로하기 때문에 나는이 작동합니다 생각하지 않습니다. –

0

솔루션은 데이터 개체 자체의 정의를 수정할지 여부에 따라 달라질 수 있습니다. 데이터 객체를 수정할 수 있으면 업데이트 허용 여부를 제어하는 ​​플래그를 추가 할 수 있습니다. 그런 다음 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

감사합니다 내 데이터 소스에 바인딩 된 일부 요소를 편집 할 수 있기 때문입니다. 데이터 소스 속성이 변경되기 때문에 사용자가 편집 할 때 요소가 업데이트되는 것을 원하지 않습니다. 데이터 소스는 여전히 일부 요소를 업데이트 할 수 있어야하므로 그 안에 CanUpdate 논리를 사용할 수는 없습니다. –

관련 문제