C # WPF Принудительно обновляет свойство зависимостей - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть некоторый код (не созданный мной), который имеет два файла View / ViewModel.

В ViewModel, он имеет свойство State, а в View есть DepedencyProperty, который имеетпривязка к этому государственному имуществу.

Ниже показан фрагмент кода

internal class SceneViewModel : INotifiedPropertyChanged
{
  public event PropertyChangedEventHandler PropertyChanged;

  EditContext _State;
  public EditContext State
  {
    get => (CurrentAsset != null ? _State ?? (_State = InitializeState());
    protected set
    {
       _State = value;
       PropertyChanged.Notify(this, nameof(State));
    }
  }

  protected override void OnRefresh()
  {
    State = null;
  }
}

public partial class SceneView
{
  public static readonly DependencyProperty StateProperty = 
   DependencyProperty.Register("State", typeof(EditContext), typeof(SceneView), 
     new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.Inherits, 
     OnStateChanged));

  public EditContext State
  {
    get => (EditContext)GetValue(StateProperty);
    set => SetValue(StateProperty, value);
  }
  protected static void OnStateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
  {
    (d as SceneView)?.OnStateChanged((EditContext)e.OldValue, (EditContext)e.NewValue);
  }

  public SceneView()
  {
    DataContextChanged += OnDataContextChanged;

    InitializeComponent();
    InitializeView();

    SetBinding(StateProperty, new Binding("State")); 
  }
}

Вызов SetBinding в SceneView () связывает свойство DependencyProperty со свойством состояния ViewModel.

ПроблемаЯ сталкиваюсь с тем, что, когда функция SceneViewModel «OnRefresh» запускается, она не обновляет свойство DependencyProperty в SceneView сразу, вызывая проблему во время рендеринга SceneView.

Функция OnStateChanged действительно срабатываетпозже, после того как вызывается «State = null», - но это задерживается.

Возможно ли обновить свойство DependencyProperty в представлении сразу после того, как состояние ViewModel было уведомлено / изменено?

...