记录一次我自定义导航失效
当我在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,导致数据不同步。

浙公网安备 33010602011771号