这是一个非常简单的 xaml:
<TreeView x:Name="provenanceTree"
ItemsSource="{x:Bind ProvenanceTreeItems}" SelectionMode="Single"
SelectedItem="{x:Bind focus, Mode=TwoWay}"
>
<!-- Definitions in here -->
</TreeView>
这里的想法是,控件有一个
focus
,树视图的选择应该遵循该焦点。
大多数情况下,它有效。 但是,当焦点改变需要添加
ItemsSource
时,问题就出现了 - 也就是说:我试图在同一操作中添加一个项目并选择它。 当然,TreeView 会重绘,但不会选择任何内容 - 如果之前选择了任何内容,则会取消选择。
我尝试不在bindng中分配
SelectedItem
,而是在重新聚焦代码中分配,但我遇到了同样的问题。
我明白了:对
ItemsSource
的更改不会立即传递到 TreeView,因此我尝试选择树中没有的内容。 如何判断何时可以安全地选择新添加的项目? 有什么方法可以调整绑定,使其按预期工作吗?
您只需添加新项目并将其作为
SelectedItem
传递。例如,假设 TreeView
是 x:Name
d TreeViewControl:
private void AddingTestButton_Click(object sender, RoutedEventArgs e)
{
var newItem = new ProvenanceTreeItems();
ProvenanceTreeItems.Add(newItem);
TreeViewControl.SelectedItem = newItem;
}