У меня есть некоторый код (не созданный мной), который имеет два файла 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 было уведомлено / изменено?