2016-08-10 22 views
0

私は現在、その起源や解決策がわからないクラッシュに苦しんでいます。要素は既に別の要素の子要素です - PivotItems

私は、静的リソース

​​

としてXAMLによって使用され、TabMainViewModelはこのようになりますされ、コンストラクタ(

ctor { ... SimpleIoc.Default.Register<TabMainViewModel>(); } 
public TabMainViewModel TabMainVm => ServiceLocator.Current.GetInstance<TabMainViewModel>(); 

このVMLに登録された私のVMとViewModelLocatorを持っています。

public TabMainViewModel(MenuPivotFactory factory) 
{ 
    PivotItems = new ObservableCollection<PivotItem>(factory.PivotItems); 
} 

public ObservableCollection<PivotItem> PivotItems { get; set; } 

そして、工場はServiceLocatorによって注入される(regi stered)とそれだけで私はこれが私のオブジェクトの作成プロセスがやや明確に願っていますPivotItemの

/*NavigationHelper*/ 
private static readonly IDictionary<Type, Type> ViewModelRouting 
     = new Dictionary<Type, Type> 
     { 
      {typeof(MonitorViewModel), typeof(MonitorView)}, 
      {typeof(RouteViewModel), typeof(RouteView)}, 
      {typeof(MapViewModel), typeof(MapView)} 
     } 
public static Page GetView(Type viewModel) 
    { 
     return (Page)Activator.CreateInstance(ViewModelRouting[viewModel]); 
    } 

/*Factory*/ 
new PivotItem 
    { 
     Header = new TabHeader {Label = "Monitor", Glyph = "\uE121"}, 
     Content = NavigationHelper.GetView(typeof(MonitorViewModel)) 
    }, 

のリストを作成します。

これで問題なく、さまざまなPivotItem間を移動できます。しかし、離れて戻るときに戻るボタンを押すと時々動作し、時にはタイトルに記載されているエラーでApp.g.i.csにスローされることがあります:要素は既に別の要素の子です。

デバッグ中に、ViewがVMのPivotItemsプロパティのgetメソッドを呼び出してから、このエラーがスローされます。だから、Pivo​​tItemsやその他のビューのビューとは何か関係があると思います。

オブジェクトを正しく作成してこのエラーがスローされないようにして、ピボットページと他のページとの間でクラッシュすることなくナビゲートできますか?

+0

あなたはピボットを追加/削除されていますか?それともいつも同じセットですか? – Depechie

答えて

0

私はあなたの問題を再現したと思う:

enter image description here

あなたItemsSoucePivotItemコントロールのコレクションですので、これはです:ObservableCollection<PivotItem>TabMainPageに戻ると、public ObservableCollection<PivotItem> PivotItems { get; set; }には、同じPivotItem秒がPivotに2回追加されます。ここで

TabMainPageOnNavigatingFrom方法では、ソリューションです:

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e) 
{ 
    this.DataContext = null; 
    base.OnNavigatingFrom(e); 
} 
関連する問題