记录一次我自定义导航失效

当我在App.xaml写了

  <Application.Resources>
      <DataTemplate DataType="{x:Type vm:DashboardViewModel}">
          <views:DashboardView />
      </DataTemplate>
      <DataTemplate DataType="{x:Type vm:StudentListViewModel}">
          <views:StudentListView />
      </DataTemplate>
  </Application.Resources>

之后又进行Prism的 prism:ViewModelLocator.AutoWireViewModel="True"处理,导致界面没有数据,
为什么会出现冲突?
AutoWireViewModel="True" 的作用

Prism 会自动为 StudentListView 创建一个新的 StudentListViewModel 实例,并将其设置为 DataContext。

但此时 DataTemplate 也创建了一个 StudentListView,并绑定了另一个 StudentListViewModel 实例。

导致 两个 ViewModel 实例共存,但你的数据只在其中一个里,界面绑定可能错乱。

DataTemplate 的作用

当 Router.CurrentView 返回 StudentListViewModel 时,WPF 会用 DataTemplate 渲染 StudentListView,并自动将 DataContext 设置为该 ViewModel。

但如果 StudentListView 自己又通过 AutoWireViewModel 创建了另一个 ViewModel,就会覆盖 DataTemplate 提供的 DataContext,导致数据不同步。

posted @ 2025-05-25 11:01  孤沉  阅读(21)  评论(0)    收藏  举报