ViewModel
プロパティがあるMVVMに続くWPFアプリケーションがありSelectedObject
ます。DataTemplate
forViewModel
には、にバインドされたDataGrid
withがあります。SelectedItem
ViewModel.SelectedElement
また、同じ画面に、多くのプロパティ(データバインディング付き)を表示するフォームがありますSelectedObject
。
問題は: 私の MainWindow には、DataTemplates を持つ ViewModels を配置する ContentControl があるため、ViewModels を切り替えることができ、プレゼンテーションが続きます。DataGrid でアイテムを選択し、(ViewModel を閉じずに切り替えて) 別の画面に移動し、元に戻すと、DataGrid の選択 (視覚的に言えば) が失われSelectedObject
ます。 )、 PropertyChanged
ViewModelで手動でイベントを発生させます。
問題は、DataTemplate が ViewModel から再レンダリングされたときに、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>