我有一组绑定到对象的Siverlight元素。我希望能够暂停数据绑定(有效冻结其当前值)一段时间(当鼠标悬停在包含的面板上时)。
最好的方法是什么?似乎没有一种简单的方法 - 一种想法是创建数据对象的副本,并在暂停期间将DataContext设置为 - 但这意味着确保我复制所有数据对象的状态。
利
答案 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();
}
}