在WPF MVVM应用程序中,UserRetrols在远程桌面连接到pc后运行appplication时重新加载,之后我们遇到了一些问题。我读了这个link about 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();
}
有谁能告诉我如何解决这个问题?
答案 0 :(得分:1)
在其他地方已经注意到,连接到运行WPF应用程序的系统时发生的处理卸载/加载两步的方法,为避免出现问题,您应避免在您的初始化代码中再次输入“已加载”处理程序,所以我不在这里讨论这个主题。
我最近发现的是,发生这种情况时,控件在大多数情况下都保留其DataContract值。
那是说我最近发现有关ItemsControl的皱纹。
作为布局/渲染/重新加载过程的一部分,似乎完全重新评估了ItemsControl,并且当这种情况发生时,将完全重新创建并重新绑定模板化的元素。
对于上面的示例来说,这意味着在卸载/加载处理过程中,将删除现有的UniformGrid并取消分配其DataContract,并创建一个全新的实例,并为其分配DataContract。 / p>
接着,将“ CamerasList”重新绑定到ItemsSource,并将重复的ItemTemplate应用于列表中的每个项目。
从您提供的样本中我不知道这是否对您特别有问题。如果您遵循MVVM模式,通常会自行进行排序,但是如果视图中有任何代码后缀,则可能无法正确说明是否已换出并替换。