Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Silverlight数据绑定-是否可以临时挂起_.net_Silverlight_Data Binding_Controls - Fatal编程技术网

.net Silverlight数据绑定-是否可以临时挂起

.net Silverlight数据绑定-是否可以临时挂起,.net,silverlight,data-binding,controls,.net,Silverlight,Data Binding,Controls,我有一组绑定到对象的Siverlight元素。我希望能够暂停数据绑定(有效地冻结其当前值)一段时间(当鼠标悬停在包含数据的面板上时) 最好的方法是什么?这似乎不是一个简单的方法-一个想法是创建数据对象的副本,并在挂起期间将DataContext设置为该副本-但这意味着确保复制数据对象的所有状态 Lee不确定您的整个场景是什么,但这听起来像是一个纯粹的UI挑战。为什么不使用WriteableBitmap创建UI的临时副本?解决方案可能取决于是否要修改数据对象本身的定义。如果可以修改数据对象,则可以

我有一组绑定到对象的Siverlight元素。我希望能够暂停数据绑定(有效地冻结其当前值)一段时间(当鼠标悬停在包含数据的面板上时)

最好的方法是什么?这似乎不是一个简单的方法-一个想法是创建数据对象的副本,并在挂起期间将DataContext设置为该副本-但这意味着确保复制数据对象的所有状态


Lee不确定您的整个场景是什么,但这听起来像是一个纯粹的UI挑战。为什么不使用WriteableBitmap创建UI的临时副本?

解决方案可能取决于是否要修改数据对象本身的定义。如果可以修改数据对象,则可以添加控制是否允许更新的标志。然后,您可以设置此属性以响应悬停事件。此外,任何属性更改事件都将在重新打开更新后排队并触发(假设这是您想要的行为)

如果不能修改对象,请考虑在其周围创建一个包装器来支持此项。

以下是如何延迟事件的示例:

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();
    }
}
类数据对象
{
私有bool_canUpdate=true;
列表属性ChangedDelayed=新建列表();
公共图书馆更新
{
获取{return\u canUpdate;}
设置
{
如果(值!=\u可以更新){
_canUpdate=值;
如果(_canUpdate)
NotifyPropertyChangedDelayed();
}
}
}
受保护的void NotifyPropertyChanged(字符串属性)
{
如果(可以更新){
//火灾事件
}否则{
propertiesChangedDelayed.Add(属性);
}
}
私有void NotifyPropertyChangedDelayed()
{
foreach(propertiesChangedDelayed中的字符串属性)
{
通知财产变更(财产);
}
propertiesChangedDelayed.Clear();
}
}

谢谢-我认为这不可行,因为我需要交互的UI。谢谢,原因是绑定到数据源的某些元素是可编辑的。由于数据源属性正在更改,我不希望这些元素在用户编辑它们时更新。数据源仍然需要能够更新某些元素,因此我只能更新其中的逻辑。