0

我试图在这里生成此代码但没有成功。该属性被序列化并存储在一个文件中:

在此处输入图像描述

然后加载并反序列化该文件:

在此处输入图像描述

不幸的是,组合框没有更新,因为有一个空引用,如下面的代码中所述

在此处输入图像描述

namespace NinjaTrader.Custom.Strategies.SidiSystem
{
    [JsonObject(MemberSerialization.OptIn)]
    public class SidiSystemBase : Strategy
    {
        private Setup setup;
        private ComboBox spCbSetup;

        private void AddSidePanelRight()
        {
            spCbSetup = new ComboBox
            {
                ItemsSource = Enum.GetValues(typeof(Setup)),
            };
            spCbSetup.SelectionChanged += SpCbSetup_SelectionChanged;
        }

        private void SpCbSetup_SelectionChanged(object sender, RoutedEventArgs rea)
        {
            if (spCbSetup == null)
            {
                return;
            }

            switch ((Setup)spCbSetup.SelectedItem)
            {
                case Setup.None:
                    Setup = Setup.None;
                    break;

                case Setup.OpenRange:
                    Setup = Setup.OpenRange;
                    break;

                case Setup.SuperTrend:
                    Setup = Setup.SuperTrend;
                    break;

                case Setup.LineBreak:
                    Setup = Setup.LineBreak;
                    break;

                case Setup.LevelBounce:
                    Setup = Setup.LevelBounce;
                    break;
            }
        }

        private void SpBtnSaveTemplate_Click(object sender, RoutedEventArgs e)
        {
            using (StreamWriter file = File.CreateText("xxx"))
            {
                JsonSerializer serializer = new JsonSerializer()
                {
                    Formatting = Formatting.Indented,
                    PreserveReferencesHandling = PreserveReferencesHandling.Objects
                };
                serializer.Serialize(file, this);
            }
        }

        private void SpBtnLoadTemplate_Click(object sender, RoutedEventArgs e)
        {
            var jsonSettings = new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects };
            var obj = JsonConvert.DeserializeObject<SidiSystemBase>(File.ReadAllText("xxx"), jsonSettings);
        }

        private void SetSelectedSetup()
        {
            **if (spCbSetup == null)
            {
                return; // here there is the NULL reference and the code is therefore canceled
            }**

            switch (Setup)
            {
                case Setup.None:
                    spCbSetup.SelectedItem = Setup.None;
                    break;

                case Setup.OpenRange:
                    spCbSetup.SelectedItem = Setup.OpenRange;
                    break;

                case Setup.SuperTrend:
                    spCbSetup.SelectedItem = Setup.SuperTrend;
                    break;

                case Setup.LineBreak:
                    spCbSetup.SelectedItem = Setup.LineBreak;
                    break;

                case Setup.LevelBounce:
                    spCbSetup.SelectedItem = Setup.LevelBounce;
                    break;
            }
        }

        [JsonProperty, JsonConverter(typeof(StringEnumConverter))]
        public Setup Setup
        {
            get
            {
                return setup;
            }
            set
            {
                if (value != setup)
                {
                    setup = value;
                    SetSelectedSetup();
                }
            }
        }
    }
}

有人可以告诉我如何在反序列化后通过属性(设置)自动更新组合框吗?信息,我是编程的新手;-)

4

0 回答 0