WPF中远程桌面连接(RDP)后视图被重新加载

3
在WPF MVVM应用程序中,当远程桌面连接到运行该应用程序的PC后,UserControls会重新加载,之后我们遇到了一些问题。我阅读了这篇关于WPF的链接,但我无法解决这个问题。
有一个ItemsControl,其中添加了UserControl。
<ItemsControl ItemsSource="{Binding CamerasList}" x:Name="AllCamerasControl">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <local:SingleView />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

UserControl的构造函数如下:

public SingleCameraView()
{ 
    InitializeComponent();
    DataContext = new SingleViewModel();
}

有人能告诉我如何解决这个问题吗?

1个回答

5
在其他地方已经指出,在连接到运行WPF应用程序的系统时处理卸载/加载两步骤的方法,并且为了避免问题,您应该在“Loaded”处理程序中防止初始化代码的重新进入,因此我不会在这里讨论这个主题。
最近我发现的是,当这种情况发生时,控件大部分保留其DataContract值。
话虽如此,我最近发现了一个有关ItemsControl的细节。
它似乎作为布局/渲染/重新加载过程的一部分被完全重新评估,当这种情况发生时,模板中的元素将被完全重新创建和重新绑定。
对于您上面的示例,这意味着在卸载/加载处理过程中,现有的UniformGrid将被删除并取消分配其DataContract,并创建一个全新的实例,并将其分配给DataContract。
随后,“CamerasList”将重新绑定到ItemsSource,并为列表中的每个项目应用重复的ItemTemplate。
根据您提供的示例,我不知道这是否特别针对您的问题。如果您遵循MVVM模式,这通常会自动解决,但如果视图中有任何代码后备,则可能无法正确处理被替换。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接