У меня есть TreeView на моей странице. Он привязан к набору клиентов, содержащих контракты, например:
public class Client
{
public int ClientID { get; set; }
public string Name { get; set; }
public List<Contract> Contracts { get; set; }
}
public class Contract
{
public int ContractID { get; set; }
public int ClientID { get; set; }
public string Name { get; set; }
}
XAML для моего TreeView выглядит следующим образом:
<sdk:TreeView x:Name="tvClientContract" ItemsSource="{Binding ClientContracts}">
<sdk:TreeView.ItemTemplate>
<sdk:HierarchicalDataTemplate ItemsSource="{Binding Path=Contracts}">
<TextBlock Text="{Binding Path=Name}" />
</sdk:HierarchicalDataTemplate>
</sdk:TreeView.ItemTemplate>
</sdk:TreeView>
Где ClientContracts — это List<Clients>
. Привязка работает нормально, и у меня есть иерархическая сетка.
Проблема, с которой я сталкиваюсь, заключается в том, что при открытии формы с TreeView я хочу выбрать текущего клиента, в настоящее время я использую следующий код:
TreeViewItem client = (TreeViewItem)tvClientContract.ItemContainerGenerator.ContainerFromItem(aClient);
or
TreeViewItem client = (TreeViewItem)tvClientContract.ItemContainerGenerator.ContainerFromIndex(tvClientContract.Items.IndexOf(aClient));
client.IsSelected = true;
но это возвращает противоречивые результаты, например, я открываю форму, когда выбран клиент «ABC», и клиент будет нулевым. Я открываю его снова, когда выбран клиент «ABC», и он возвращает правильный TreeViewItem. Кто-нибудь сталкивался с этим раньше или знает что-нибудь, на что я могу посмотреть, чтобы помочь решить проблему?
Я запускаю приведенный выше код в событии Loaded TreeView.