这样的事情是否存在(例如 UpdateSourceTrigger 存在)还是可能以某种方式存在?我只想在需要时更新目标。一次性绑定不起作用,因为我不希望它更新一次 - 我想在需要时更新它,而不是在绑定对象更改时更新。
所以我的问题很简单:如何在源更改时不更改目标,但在调用某些内容时更改目标?
谢谢
您可以在需要时重新绑定代码中的数据。或者试试 BindingExpression.UpdateTarget()
您可以做的另一件事是使用附加行为,该行为挂钩到与您的绑定不直接相关的某些事件。下面是一些工作代码的框架,只是为了给你一些想法。
internal class ContactcControlPropertySetter : Behavior<ContentControl>
{
protected override void OnAttached() {
base.OnAttached();
if (AssociatedObject == null)
throw new InvalidOperationException("AssociatedObject must not be null");
AssociatedObject.DataContextChanged += OnDataContextChanged;
CultureManager.UICultureChanged += OnCultureChanged;
}
protected override void OnDetaching() {
AssociatedObject.DataContextChanged -= OnDataContextChanged;
CultureManager.UICultureChanged -= OnCultureChanged;
}
private void OnCultureChanged(object sender, EventArgs e) {
SetProperties();
}
private void SetProperties()
{
...
var tooltipFmt = _resourceManager.GetString(key, culture);
...
AssociatedObject.ToolTip = tooltip;
...
}
如果您事先知道不希望更新 UI 的条件,那么PropertyChangedEvent
在这种情况下不提高如何。(如果您正在课堂上实施)INPC
。ViewModel
我知道这行不通,Dependency Property
因为PropertyChangedEvent
它是由 DP 内部处理的。但在正常情况下CLR properties
它会起作用。例如 -
<TextBlock Text="{Binding Name}"/>
视图模型 -
public string Name
{
get { return name; }
set
{
name = value;
if(UpdateUI) // Your condition here
{
OnPropertyChanged("Name");
}
}
}