当重复创建View并绑定同一个ViewModel后,ViewModel中的字段更新,在新的View中的没有反应或者在View中找不到相应的视觉树(如ListBox的ListBoxItem)

初始的解决方案:View关闭后,注销属性Unregister Dependency

如果可以将属性注销,貌似是可行的

注销属性 RemoveDependency(LoadCousewareItemAnimationProperty);

 1 private void RemoveDependency(DependencyProperty prop)
 2 {
 3   var registeredPropertyField = typeof(DependencyProperty).
 4     GetField("RegisteredPropertyList", BindingFlags.NonPublic | BindingFlags.Static);
 5   object list = registeredPropertyField.GetValue(null);
 6   var genericMeth = list.GetType().GetMethod("Remove");
 7   try
 8   {
 9     genericMeth.Invoke(list, new[] { prop });
10   }
11   catch (TargetInvocationException)
12   {
13     Console.WriteLine("Does not exist in list");
14   }
15 
16   var propertyFromNameField = typeof(DependencyProperty).
17     GetField("PropertyFromName", BindingFlags.NonPublic | BindingFlags.Static);
18   var propertyFromName = (Hashtable)propertyFromNameField.GetValue(null);
19 
20   object keyToRemove = null;
21   foreach (DictionaryEntry item in propertyFromName)
22   {
23     if (item.Value == prop){        
24        keyToRemove = item.Key;
25        return;
26     }
27   }
28   if (keyToRemove != null)
29   propertyFromName.Remove(keyToRemove);
30 }
View Code

相关文章:

  • 2021-05-29
  • 2021-04-22
  • 2021-07-11
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-10-07
  • 2021-09-13
  • 2021-12-02
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-02
相关资源
相似解决方案