我知道這個問題有點基本,但在目前,我完全失去了如何添加一個新的ViewModel到我的ViewModelLocator類在MVVM
輕工具包。在MVVM Light工具包中添加一個新的ViewModel到ViewModelLocator
我目前的實現看起來像這樣:
首先,假設我有一個名爲Settings
窗口,一個視圖模型命名SettingsViewModel
和ViewModelLocator ViewModelLocator
。
首先我打電話CreateSettings()
在VieModelLocator構造:
public ViewModelLocator()
{
if (ViewModelBase.IsInDesignModeStatic)
{
}
else
{
CreateSettings();
}
CreateMain();
}
注意,因爲我沒有使用混合這將始終運行,每一次我嘗試運行它構建應用程序。現在是`CreateSettings()方法。
我不知道我在做什麼,所以我試圖安全地玩它,並在創建和管理MainViewModel的方法之後對所有東西進行建模。
public static void CreateSettings()
{
if (_settings == null)
{
_settings = new SettingsViewModel();
}
}
再經過那些用於MainViewModel建模再過方法:
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance",
"CA1822:MarkMembersAsStatic",
Justification = "This non-static member is needed for data binding purposes.")]
public SettingsViewModel Settings
{
get
{
return SettingsStatic;
}
}
public static SettingsViewModel SettingsStatic
{
get
{
if (_settings == null)
{
CreateSettings();
}
return _settings;
}
}
在我Settings
窗口的XAML:
<Window x:Class="_5500A_Auto_Calibrator.Settings"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Settings" Height="300" Width="300"
DataContext="{Binding Source={StaticResource Locator}, Path=Settings}">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Skins/MainSkin.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
窗口,然後從我的MainViewModel打開,像這樣:
Settings settings = new Settings();
settings.Show();
如果我試試這個,我收到一個異常:
"'Provide value on 'System.Windows.StaticResourceExtension' threw an exception.' Line number '4' and line position '39'."
和內部異常:
"Cannot find resource named 'Locator'. Resource names are case sensitive."
我已經在涉及窗口的無能找Locator
資源的錯誤讀了,但是大部分都與混合有關。
我目前的看法是,我做錯了什麼,但是有很少的文檔來添加新的ViewModel,我不確定我做錯了什麼。
編輯:
我的App.xaml:
<Application x:Class="_5500A_Auto_Calibrator.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:_5500A_Auto_Calibrator.ViewModel"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
StartupUri="MainWindow.xaml"
mc:Ignorable="d">
<Application.Resources>
<!--Global View Model Locator-->
<vm:ViewModelLocator x:Key="Locator"
d:IsDataSource="True" />
</Application.Resources>
</Application>
嘿丹特,這是否回答你的問題?(如果是的話,你可以標記爲答案,如果沒有,你可以詳細說明一些:) – Noctis