未找到ViewModel的匹配视图

时间:2016-11-07 11:42:10

标签: c# wpf mvvm caliburn.micro caliburn

我有一个MainView和一个ViewModel,它在中间显示当前的ViewModel 我正在不同的ViewModel之间切换当前的ViewModel,切换的代码通常应该像这样工作:CurrentViewModel = new FooViewModel();然后它应该找到匹配的视图到ViewModel。
但是当我调试应用程序时,它只显示当前视图模型所在的路径 - >它 找不到ViewModel的视图。

我使用了Caliburn的正确文件系统。

所有以“查看”命名的视图最后都位于“视图”文件夹中 所有以“ViewModel”命名的ViewModel最终都位于“ViewModels”文件夹中

有没有人知道为什么它找不到正确的视图或我错过了什么?

2 个答案:

答案 0 :(得分:-1)

您必须在MainWindow中定义DataTemplate:

<Window.Resources>
     <DataTemplate DataType="{x:Type vm:PaymentViewModel}">
         <v:NewPaymentView/>
     </DataTemplate>
    <DataTemplate DataType="{x:Type vm:MainMenuViewModel}">
        <v:MainMenu/>
    </DataTemplate>
</Window.Resources>    

 xmlns:vm ="clr-namespace:Your ViewModels"
 xmlns:v="clr-namespace:Your Views"

然后在Current控件中绑定CurrentViewModel:

<ContentControl Grid.Row="0" Grid.Column="0" Grid.RowSpan="2" Content="{Binding CurrentViewModel}"  />

然后不要忘记在MainViewModel中提升PropertyChanged(如果你不在ctor中)。 这是我的第一篇文章,希望对此有所帮助。

答案 1 :(得分:-1)

这是为了不使用任何mvvm框架

在主窗口视图模型中为子视图模型定义数据模板。

对于整个应用程序,您必须为主视图模型创建静态对象。

然后只会更改视图。

应该是这样的......

public partial class App : Application
{
    public static MainWindowViewModel mainWindowViewModel;

    public App()
    {
        mainWindowViewModel = new MainWindowViewModel();
    }
}