Blazor StateHasChanged不会触发渲染

时间:2020-07-18 17:09:57

标签: c# blazor-server-side state-management

我正在尝试在Blazor Server中拥有一个共享的State组件:

 public class ProgressState
    {
        public string SelectedForm { get; private set; }

        private event Action _onSetForm;
        private event Action<int> _onStep;


        public void SetForm(string form)
        {
            if (SelectedForm != form)
            {
                SelectedForm = form;
                NotifyStateChanged();
            }
        }

        public void OnSetForm(Action action)
        {
            if (_onSetForm.NotContains(action))
                _onSetForm += action;
        }

        public void OnStep(Action<int> action)
        {
            if (_onStep.NotContains(action))
                _onStep += action;
        }

        public void Step(int step) => _onStep?.Invoke(step);
        private void NotifyStateChanged() => _onSetForm?.Invoke();
    }

在子组件中,我调用例如

 public void SetForm(string form)

在父组件中,我设置了一些组件属性,并这样调用StateHasChanged:

private async void FormChanged()
        {
            if (ProgressState.SelectedForm != selectedForm)
                await InvokeAsync(() =>
                {
                    selectedForm = ProgressState.SelectedForm;
                    StateHasChanged();
                });
        }

它只是不刷新父组件,我最终使用了 EventCallback

任何想法我该如何解决?这是一个简单的示例,也许根本不需要共享状态,但是如果想了解一些复杂的情况,我想在将来学习。

谢谢!

0 个答案:

没有答案