我是初學者,在設置WPF項目和跟隨MVVM模式時遇到問題;我不明白如何將視圖鏈接到以下組織的視圖模型:正確分離視圖和視圖模型
我已經在名爲「Company.App.UI」的項目的根目錄下設置了3個文件夾:Model,View和ViewModel。 App.xaml和MainWindow.xaml位於項目的根目錄下。
這個開始,我想控制在主窗口的客戶區中顯示的內容: - 具有文件夾「查看」用戶控件作爲在渲染視圖,例如「LoginView.xaml」 - 具有相應該文件夾 '視圖模型',例如在瀏覽模式 'LoginView.xaml.cs'
那麼我所做的MainWindow.xaml是:
<Window x:Class="Company.App.UI.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:viewmodel="clr-namespace:Company.App.UI.ViewModel"
xmlns:view="clr-namespace:Company.App.UI.View" <!-- does not work, not a namespace -->
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<DataTemplate DataType="{x:Type viewmodel:LoginViewModel}">
<view:LoginView/> <!-- does not work -->
</DataTemplate>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal">
<ContentControl Content="{Binding ClientArea}"/>
</StackPanel>
</Grid>
</Window>
而且在MainWindow.xaml.cs:
using System.Windows;
using System.Windows.Controls;
using Company.App.UI.ViewModel;
namespace Company.App.UI
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private UserControl _ClientArea = null;
public UserControl ClientArea
{
get { return _ClientArea; }
set { _ClientArea = value; }
}
public MainWindow()
{
if (_ClientArea == null) { ClientArea = new LoginViewModel(); }
InitializeComponent();
}
}
}
LoginView是一個帶有一個標籤的簡單用戶控件,只是爲了看看它是什麼。 如果我把我的LoginView.xaml放在項目的根目錄下,MainWindow.xaml旁邊,它可以工作... 我在做什麼錯誤/缺失? 我不想使用任何框架(PRISM等)來實現它的工作。 我的道歉如果我的文章是重複的,但我也沒有找到它,而搜索。 謝謝,
更新
我用VS2013 0更新/補丁/等 一切都在同一個項目。
的錯誤輸出是:
- 類型或命名空間名稱「查看」中不 命名空間「Company.App.UI」存在(是否缺少程序集引用?)
- 的命名空間 「clr-namespace:Company.App.UI.View」中不存在名稱「LoginView」。
- 找不到類型'view:LoginView'。驗證您是否缺少程序集引用,並且所有引用的程序集都已構建。
LoginView.xaml:
<UserControl x:Class="Company.App.UI.ViewModel.LoginViewModel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Label>User control login</Label>
</Grid>
</UserControl>
LoginViewModel.cs:
using System.Windows.Controls;
namespace Company.App.UI.ViewModel
{
public partial class LoginViewModel : UserControl
{
public LoginViewModel()
{
}
}
}
文件夾結構不相關。您必須在代碼文件中使用適當的名稱空間聲明,例如'namespace Company.App.UI.View {...}' – Clemens
*「它的工作原理」* - 什麼不起作用?你想[改進](https://codereview.stackexchange.com/)工作代碼? – Sinatr
'ClientArea'被聲明爲'UserControl'(非常糟糕的想法)。然後你爲它分配一個叫做「LoginViewModel」的東西。什麼是「LoginViewModel」?它是一個視圖模型還是一個控件? –