类型“ SettingsViewModel”不包含任何可访问的构造函数。有办法摆脱这个错误吗?

时间:2019-10-25 02:29:34

标签: c# wpf xaml visual-studio-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() ;
        }

只要能消除此错误消息以及类似的错误消息,我们将不胜感激。

0 个答案:

没有答案