/// <summary> /// 初始化container的选中Item策略 /// </summary> /// <param name="container"></param> /// <param name="selectedItemGetter"></param> public static void InitSelecter(FrameworkElement container, Func <object> selectedItemGetter) { Func <ItemSelecter> selecterCreater; _selecters.TryGetValue(container.GetType(), out selecterCreater); if (selecterCreater != null)//container载入的时候定位到指定项 { container.Loaded += (s, e) => { ItemSelecter selecter = selecterCreater(); selecter.m_container = container; selecter.SelectItem(container, selectedItemGetter()); }; container.TargetUpdated += (s, e) => { if (!container.IsLoaded) { return; } ItemSelecter selecter = selecterCreater(); selecter.m_container = container; selecter.SelectItem(container, selectedItemGetter()); }; } }
protected override void OnAttached() { //使用委托取值,因为在OnAttached时SelectedItem还未赋值 ItemSelecter.InitSelecter(AssociatedObject, () => SelectedItem); base.OnAttached(); }