Тип «SettingsViewModel» не включает никаких доступных конструкторов. Есть ли способ избавиться от этой ошибки? - PullRequest
0 голосов
/ 25 октября 2019

Я делаю простое приложение с WPF и привязываю одно из окон к модели представления. Модель представления нуждается в нескольких ссылках во время выполнения, чтобы получить необходимые данные, поэтому моя модель представления имеет конструктор с параметрами. У меня также есть конструктор без параметров, который можно использовать во время проектирования для проверки внешнего вида окна.

Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда существует конструктор с параметрами, Visual Studio отображает ошибку:

'Тип "SettingsViewModel" не включает никаких доступных конструкторов.'

Если я закомментирую конструктор времени выполнения, ошибок не будет, и все будет работать как положено.

Кроме того, я попытался сделать приватный конструктор частным и показать его с помощью фабричного метода, который не имел никакого эффекта. Я попытался закомментировать код с выделенным кодом, ссылающийся на второй конструктор. Я также попытался очистить решение, перезапустить Visual Studio, а затем перестроить.

Пока единственное, что я нашел для работы, это закомментирование конструктора времени выполнения и любых ссылок на него. Также, чтобы было ясно, я пока не использую экземпляр SettingsViewModel, на данный момент я просто пытаюсь определить его как ресурс.

SettingsWindow.xaml:

    <Window.Resources>
        <local:SettingsViewModel x:Key="DevelopTimeModel" />
        <Style  TargetType="{x:Type ListBoxItem}">
            <Setter Property="BorderBrush" Value="Gray"></Setter>
            <Setter Property="BorderThickness" Value="1"></Setter>
            <Setter Property="Padding" Value="2 3"></Setter>
            <Style.Triggers>
                <Trigger Property="ItemsControl.AlternationIndex" Value="0">
                    <Setter Property="Background" Value="#00000000"></Setter>
                </Trigger>
                <Trigger Property="ItemsControl.AlternationIndex" Value="1">
                    <Setter Property="Background" Value="LightGray"></Setter>
                </Trigger>
            </Style.Triggers>
        </Style>

    </Window.Resources>

SettingsWindow.xaml.cs

        public SettingsWindow(Autodesk.Revit.UI.UIApplication app)
        {
            InitializeComponent();
            SettingsViewModel viewModel = SettingsViewModel.GetRuntimeViewModel(app, this);
            this.DataContext = viewModel;
            MainListBox.SelectionChanged += (o, e) => viewModel.RefreshCommands();
        }

SettingViewModel.cs

        public SettingsViewModel()
        {
           //creation of design-time data here
        }

        public static SettingsViewModel GetRuntimeViewModel(UIApplication app, SettingsWindow settingsWindow)
        {
            return null;// new SettingsViewModel(app, settingsWindow);
        }


        private SettingsViewModel(UIApplication app, SettingsWindow settingsWindow)
        {
            ContextRouter = new RevitContextRouter(app, this.ToString());
            members.PropertyChanged += (o, e) => NotifyPropertyChanged("Members." + e.PropertyName);
            Commands = new SettingsCommands(this);
            LoadSettings();
            SettingsWindowRef = settingsWindow;
            settingsWindow.Closed += (s,e) => SaveSettings() ;
        }

Любая помощь избавиться отэто сообщение об ошибке и аналогичные, когда они появляются, будет оценено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...