在 WPF MVVM 应用程序中,在远程桌面连接到应用程序正在运行的电脑后,用户控件会重新加载,之后我们遇到了一些问题。我阅读了有关 WPF 的链接,但无法解决此问题。
有一个ItemsControlsUserControl添加到:
<ItemsControl ItemsSource="{Binding CamerasList}" x:Name="AllCamerasControl">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:SingleView />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)
其构造函数UserControl如下:
public SingleCameraView()
{
InitializeComponent();
DataContext = new SingleViewModel();
}
Run Code Online (Sandbox Code Playgroud)
谁能告诉我如何解决这个问题?
小智 5
在其他地方,有人指出,处理连接到运行 WPF 应用程序的系统时发生的卸载/加载两步的方法,并且为了避免出现问题,您应该防止在“已加载”中重新输入初始化代码处理程序,所以我在这里不讨论这个主题。
我最近发现,当发生这种情况时,控件在很大程度上会保留其 DataContract 值。
也就是说,我最近发现了一个关于 ItemsControl 的问题。
看起来,作为布局/渲染/重新加载过程的一部分,ItemsControl 被完全重新评估,并且当发生这种情况时,模板化元素将被完全重新创建和重新绑定。
对于上面的示例来说,这意味着作为卸载/加载处理的一部分,现有的 UniformGrid 将被删除并取消分配其 DataContract,并且创建一个全新的实例,并分配 DataContract。
接下来,“CamerasList”被反弹到 ItemsSource,并且重复的 ItemTemplate 应用于列表中的每个项目。
从您提供的样本中我不知道这对您来说是否是一个特别的问题。如果您遵循 MVVM 模式,这通常会自行解决,但如果视图中有任何代码隐藏,则它可能无法正确解释被换出和替换。
| 归档时间: |
|
| 查看次数: |
1203 次 |
| 最近记录: |