Я делаю простое приложение с WPF и привязываю одно из окон к модели представления. Модель представления нуждается в нескольких ссылках во время выполнения, чтобы получить необходимые данные, поэтому моя модель представления имеет конструктор с параметрами. У меня также есть конструктор без параметров, который можно использовать во время проектирования для проверки внешнего вида окна.
Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда существует конструктор с параметрами, Visual Studio отображает ошибку:
«Тип «SettingsViewModel» не содержит доступных конструкторов».
Если я закомментирую конструктор времени выполнения, тогда ошибок не возникнет, и все будет работать так, как ожидалось.
Кроме того, я попытался сделать конструктор времени выполнения закрытым и открыть его через фабричный метод, но это не дало никакого эффекта. Я попытался закомментировать код программной части, ссылающийся на второй конструктор. Я также пробовал очистить решение, перезапустить визуальную студию, а затем восстановить.
Пока что единственное, что я нашел работающим, — это закомментировать конструктор времени выполнения и любые ссылки на него. Также, чтобы было ясно, я еще ни для чего не использую экземпляр SettingsViewModel, на данный момент я просто пытаюсь определить его как ресурс.
НастройкиWindow.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>
НастройкиWindow.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();
}
НастройкаViewModel.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() ;
}
Будем признательны за любую помощь в избавлении от этого сообщения об ошибке и подобных сообщений, когда они появляются.