3

そのようなものは存在しますか(UpdateSourceTriggerが存在するように)、またはそれはどういうわけか可能ですか?必要なときにだけターゲットを更新したいのですが。一度だけ更新したくないので、1回限りのバインドは機能しません。バインドされたオブジェクトが変更されたときではなく、必要なときに更新したいと思います。

だから私の質問は非常に単純です:ソースが変更されたときにターゲットを変更しないで、何かが呼び出されたときにターゲットを変更するにはどうすればよいですか?

ありがとう

4

3 に答える 3

1

必要なときにコード ビハインドでデータを再バインドできます。または BindingExpression.UpdateTarget () を試してください

于 2012-11-17T21:08:13.053 に答える
0

UIを更新したくない条件を事前に知っている場合はPropertyChangedEvent、その場合は上げないでください。(クラスに実装INPCしている場合)。ViewModel

DPによって内部的に処理されるDependency Propertyため、これは機能しないことを私は知っています。PropertyChangedEventしかし、通常の場合CLR propertiesは機能します。例-

<TextBlock Text="{Binding Name}"/>

ViewModel-

public string Name
{
   get { return name; }
   set
   {
      name = value;
      if(UpdateUI) // Your condition here
      {
         OnPropertyChanged("Name");
      }
   }
}
于 2012-11-18T18:44:26.810 に答える
0

もう 1 つできることは、バインディングに直接関係のないイベントにフックする、添付された動作を使用することです。以下は、いくつかのアイデアを提供するための作業コードのスケルトンです。

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 に答える