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