我有一个跟随 MVVM 的 WPF 应用程序,我ViewModel
有一个SelectedObject
属性。在DataTemplate
for the 中ViewModel
,有一个DataGrid
with SelectedItem
bound to ViewModel.SelectedElement
。
同样在同一个屏幕中,我有一个表单,它显示了SelectedObject
.
问题是:我的 MainWindow 有一个 ContentControl,我在其中放置了具有 DataTemplates 的 ViewModel,因此我可以切换 ViewModel,然后进行演示。当我在 DataGrid 中选择一个项目时,转到另一个屏幕(通过切换 ViewModel 而不关闭它们),然后切换回来,DataGrid 选择(从视觉上讲)丢失了,即使数据绑定SelectedObject
属性仍然是它应该是的(用断点测试),然后我在 ViewModel 中手动引发PropertyChanged
事件。
所以,问题是:当从 ViewModel 重新渲染 DataTemplate 时,如何恢复 DataGrid 的视觉选择状态?
编辑:我项目中的一些代码:
视图模型:
public ObservableCollection<Paciente> ListaPacientes {
get { return _lista_pacientes; }
set {
_lista_pacientes = value;
RaisePropertyChanged(() => ListaPacientes);
}
}
ObservableCollection<Paciente> _lista_pacientes;
public Paciente PacienteSelecionado {
get { return _paciente_selecionado; }
set { _paciente_selecionado = value;
RaisePropertyChanged(() => PacienteSelecionado);
}
}
Paciente _paciente_selecionado;
看法:
<DataTemplate x:Name="TelaPacientes" DataType="{x:Type vm:TelaPacientesViewModel}">
<DataGrid x:Name="dataGrid" Margin="0,10,0,0"
AutoGenerateColumns="False" SelectionMode="Single"
CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserResizeRows="False"
AlternatingRowBackground="Linen"
ItemsSource="{Binding ListaPacientes}"
SelectedItem="{Binding PacienteSelecionado, Mode=TwoWay}">
<DataGrid.Columns>
<DataGridTextColumn Header="{x:Static res:Strings.TelaPacientes_CPFLista}" Binding="{Binding CPF}" IsReadOnly="True" Width="80"/>
<DataGridTextColumn Header="{x:Static res:Strings.TelaPacientes_NomeLista}" Binding="{Binding Nome}" IsReadOnly="True" Width="*"/>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>