【问题标题】:Matching View for ViewModel not found未找到 ViewModel 的匹配视图
【发布时间】:2016-11-07 11:42:09
【问题描述】:

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

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

所有最后以“View”命名的视图都位于“Views”文件夹中。
所有最后以“ViewModel”命名的 ViewModel 都位于“ViewModels”文件夹中

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

【问题讨论】:

  • 您需要为视图定义数据模板
  • 我认为我在使用 caliburn micro 时不必定义数据模板?

标签: c# wpf mvvm caliburn.micro caliburn


【解决方案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"

然后将 CurrentViewModel 绑定到 Content 控件中:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    那么只有视图会被改变。

    应该是这样的……

    public partial class App : Application
    {
        public static MainWindowViewModel mainWindowViewModel;
    
        public App()
        {
            mainWindowViewModel = new MainWindowViewModel();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-06-20
      • 2019-02-10
      • 2015-04-18
      • 1970-01-01
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多