Very simple piece of code. Why is it not working? Super frustrated, I've spent half a day battling this plus additional xamDataGrid nonsense (autogenerated fields ignoring format specifier in my custom EditorStyle). Here's the code where I specifically tell the tab control to set the selected item, and the infragistics control decides to IGNORE what I tell it. Can someone explain what's happening?
private void SetDocumentHostContent(DocumentContentHost host, object viewToAdd) { var rootDocumentPane = host.Panes.First(); var tabGroupPane = rootDocumentPane.Panes.OfType<TabGroupPane>().First();
var tradeItem = tabGroupPane.Items.OfType<ContentPane>().FirstOrDefault(p => (p.Header ?? "").ToString() == "Trades"); var cashReportItem = tabGroupPane.Items.OfType<ContentPane>().FirstOrDefault(p => (p.Header ?? "").ToString() == "Cashflow Report"); var notionalReportItem = tabGroupPane.Items.OfType<ContentPane>().FirstOrDefault(p => (p.Header ?? "").ToString() == "Reset Notional Report"); var importItem = tabGroupPane.Items.OfType<ContentPane>().FirstOrDefault(p => (p.Header ?? "").ToString() == "CSV");
var removeItems = new[] { tradeItem, cashReportItem, notionalReportItem, importItem }.Where(r => r != null).ToList();
ContentPane firstItem = null; var headerToUse = string.Empty; switch (viewToAdd.GetType().Name) { case "SearchResultsView": headerToUse = "Trades"; firstItem = tradeItem; break; case "CashflowReportView": headerToUse = "Cashflow Report"; firstItem = cashReportItem; break; case "ResetNotionalReportView": headerToUse = "Reset Notional Report"; firstItem = notionalReportItem; break; case "ImportedResultView": headerToUse = "CSV"; firstItem = importItem; break; }
if (firstItem != null) { // reports & trade query tabs need to be preserved - delist them from the remove list // imports tab needs to be removed, so keep that one on the remove list if (!firstItem.Equals(importItem)) { removeItems.Remove(firstItem); firstItem = null; } }
var restoreSet = tabGroupPane.Items.OfType<ContentPane>().Where(p => !removeItems.Contains(p)).ToList();
var itemsToClear = tabGroupPane.Items.OfType<ContentPane>().ToList(); foreach (var content in itemsToClear) { tabGroupPane.Items.Remove(content); }
if (firstItem == null) { // create the new view here and add as a tab firstItem = new ContentPane { AllowClose = true, AllowDockingFloating = false, AllowFloatingOnly = false, AllowDocking = false, AllowInDocumentHost = true, AllowDockingInTabGroup = false, CloseButtonVisibility = Visibility.Visible, PinButtonVisibility = Visibility.Collapsed, WindowPositionMenuVisibility = Visibility.Collapsed, Content = viewToAdd, Header = headerToUse };
restoreSet.Insert(0, firstItem); } else { firstItem.Content = viewToAdd; }
foreach (var contentPane in restoreSet) { tabGroupPane.Items.Add(contentPane); } tabGroupPane.SelectedItem = firstItem; }
Hello James,
Thank you for your post.
I have been looking into the code snippet that you have provided. I created a sample application based on your scenario and I could not managed to reproduce the behavior that you have described. If you are not able to reproduce the issue with the attached sample application, would you please modify it with the functionality, that you are using, so it reproduces the issue. This way I would be able to further investigate this for you and provide you with more detailed information on this matter. Would you please provide me and with more details about versions of assemblies that you are using? Please let me know if I am missing something from your scenario.
Looking forward to hearing from you.
I am just checking if you require any further assistance on the matter.