我有一个Control
这是可见性绑定到视图模型,但也允许用户直接关闭控件。理想情况下,我想CloseDialog
函数检查Visibility
上的绑定,如果存在,直接更新绑定值(即ViewModel的值),而不是覆盖它,但我挣扎着如何实际更新值本身通过绑定更新绑定目标值
public void CloseDialog()
{
Control visibileObject = this;
//Check to ensure we have no binding set, if we do then update the binding expression
Binding myBinding;
#if (!SILVERLIGHT)
myBinding = BindingOperations.GetBinding(visibileObject, Control.VisibilityProperty);
#else
BindingExpression bindingExpression = visibileObject.GetBindingExpression(Control.VisibilityProperty);
myBinding = bindingExpression.ParentBinding;
#endif
if (myBinding != null)
{
//Here update binding target to be Visibility.Collapsed
}
}
为什么不通过关闭请求到VM,让它处理呢?它可以决定它是否可以关闭(例如,未保存的数据)并设置属性(如果可以的话)。 –
顺便说一句,'DependencyObject.SetCurrentValue'将有助于您的请求,但它只是WPF 4/4.5 - 对我的知识没有SL支持。但严重的是,你最好改变你的方法。 –