3

这样的事情是否存在(例如 UpdateSourceTrigger 存在)还是可能以某种方式存在?我只想在需要时更新目标。一次性绑定不起作用,因为我不希望它更新一次 - 我想在需要时更新它,而不是在绑定对象更改时更新。

所以我的问题很简单:如何在源更改时不更改目标,但在调用某些内容时更改目标?

谢谢

4

3 回答 3

1

您可以在需要时重新绑定代码中的数据。或者试试 BindingExpression.UpdateTarget()

于 2012-11-17T21:08:13.053 回答
0

您可以做的另一件事是使用附加行为,该行为挂钩到与您的绑定不直接相关的某些事件。下面是一些工作代码的框架,只是为了给你一些想法。

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;
        ...
    }
于 2012-11-17T22:59:23.617 回答
0

如果您事先知道不希望更新 UI 的条件,那么PropertyChangedEvent在这种情况下不提高如何。(如果您正在课堂上实施)INPCViewModel

我知道这行不通,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");
      }
   }
}
于 2012-11-18T18:44:26.810 回答