当重复创建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 }