我有一組綁定到對象的Siverlight元素。我希望能夠暫停數據綁定(有效地凍結其當前值)一段時間(當鼠標懸停在包含面板上時)。Silverlight數據綁定 - 是否有可能暫時中止
這樣做的最好方法是什麼?似乎沒有一種簡單的方法 - 一種想法是創建數據對象的副本,並在暫停期間將DataContext設置爲該狀態 - 但這意味着要確保我複製了所有數據對象的狀態。
李
我有一組綁定到對象的Siverlight元素。我希望能夠暫停數據綁定(有效地凍結其當前值)一段時間(當鼠標懸停在包含面板上時)。Silverlight數據綁定 - 是否有可能暫時中止
這樣做的最好方法是什麼?似乎沒有一種簡單的方法 - 一種想法是創建數據對象的副本,並在暫停期間將DataContext設置爲該狀態 - 但這意味着要確保我複製了所有數據對象的狀態。
李
不知道你的整個方案是什麼,但是這聽起來像是一個純粹的UI挑戰我。爲什麼不使用WriteableBitmap創建用戶界面的臨時副本?
您的解決方案可能取決於您是否要修改數據對象本身的定義。如果您可以修改數據對象,那麼您可以添加一個標誌來控制是否允許更新。然後,您可以設置此屬性以響應懸停事件。此外,任何屬性更改事件將在更新重新啓動後排隊並觸發(假設這是您想要的行爲)。
如果您無法修改該對象,請考慮創建一個包裝來代替它。
下面是如何延緩事件爲例:
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();
}
}
謝謝 原因是一些綁定到我的數據源的元素是可編輯的。由於數據源屬性正在改變,我不希望這些元素在用戶正在編輯時更新。 數據源仍然需要能夠更新一些元素,所以我不得不在CanUpdate中使用它的邏輯。 – 2009-12-16 19:41:22
謝謝 - 我不認爲這會工作,因爲我需要的用戶界面是互動的。 – 2009-12-16 19:39:58