我正在使用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() ;
}
只要能消除此错误消息以及类似的错误消息,我们将不胜感激。