0

我有一个跟随 MVVM 的 WPF 应用程序,我ViewModel有一个SelectedObject属性。在DataTemplatefor the 中ViewModel,有一个DataGridwith SelectedItembound 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>
4

0 回答 0