2009-12-15 27 views
0

我有一組綁定到對象的Siverlight元素。我希望能夠暫停數據綁定(有效地凍結其當前值)一段時間(當鼠標懸停在包含面板上時)。Silverlight數據綁定 - 是否有可能暫時中止

這樣做的最好方法是什麼?似乎沒有一種簡單的方法 - 一種想法是創建數據對象的副本,並在暫停期間將DataContext設置爲該狀態 - 但這意味着要確保我複製了所有數據對象的狀態。

回答

0

不知道你的整個方案是什麼,但是這聽起來像是一個純粹的UI挑戰我。爲什麼不使用WriteableBitmap創建用戶界面的臨時副本?

+0

謝謝 - 我不認爲這會工作,因爲我需要的用戶界面是互動的。 – 2009-12-16 19:39:58

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(); 
    } 
} 
+0

謝謝 原因是一些綁定到我的數據源的元素是可編輯的。由於數據源屬性正在改變,我不希望這些元素在用戶正在編輯時更新。 數據源仍然需要能夠更新一些元素,所以我不得不在CanUpdate中使用它的邏輯。 – 2009-12-16 19:41:22

相關問題