我有一个树状视图绑定到一个可观察的集合。集合中的每个项本身都有一个包含项的可观察集合。
public class Item
{
public ObservableCollection<Item> Items { get; set; }
public Item Parent { get; set; }
}
public Item Root { get; set; }
<TreeView ItemsSource={Binding Root.Items}>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Items}">
<TextBlock Text="{Binding}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
我想将树中的节点从一个分支移动到另一个分支,但这样做会使控件失去焦点和选择。
UnindentItemCommand = new DelegateCommand<Item>(
item =>
{
var parent = item.Parent;
parent.Items.Remove(item);
parent.parent.Items.Add(item);
}
);
我试着从另一个问题中使用bindableSelectEditemHavior
,但没有帮助。
有人能解决这个问题吗?
我遇到了完全相同的问题。在我看来,这确实是WPF中的一个错误。移动可观察集合中的节点后,树会正确更新,并选择正确的节点,但键盘焦点会丢失。对我来说有效的是通过获取第一个treeviewitem元素并显式地设置焦点来稍微“摇动”树。然后,我将简单地转到我移动的元素,并将IsS选属性设置为false,然后设置为true,这将使焦点回到它。不是最优雅的解决方案,但与我尝试过的所有其他解决方案相比,非常简单,对最终用户来说,这一切看起来都是无缝的。
UnindentItemCommand = new DelegateCommand<Item>(
item =>
{
Item selectedItem = Item;
var parent = item.Parent;
parent.Items.Remove(item);
parent.parent.Items.Add(item);
Item = selectedItem;
TreeViewItem tvi = (TreeViewItem)
(TreeName.ItemContainerGenerator.ContainerFromItem(TreeName.Items[0]));
tvi.Focus();
Keyboard.Focus(tvi);
Item.IsSelected= false;
Item.IsSelected = true;
}
);
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
如何绑定到TreeView。从视图模型或后面的代码中选择项目
属性?:
<TreeView ItemsSource="{Binding Root.Items}" TreeView.SelectedItem="{Binding Item}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Items}">
<TextBlock Text="{Binding}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
然后在您的节点移动代码中,您可以复制所选项目,并在移动数据时重新设置它:
UnindentItemCommand = new DelegateCommand<Item>(
item =>
{
Item selectedItem = Item;
var parent = item.Parent;
parent.Items.Remove(item);
parent.parent.Items.Add(item);
Item = selectedItem;
}
);
问题内容: 我正在一个项目中,用户对我们的代客服务的请求在另一端代客接受请求。 我正在使用Firebase作为后端,并应要求将客户uid保存在“ request”子项上。 当代客接受请求时,客户uid应从“请求”节点移至“进行中”节点。 我怎样才能做到这一点? 问题答案: 我建议使用这个: 这来自以下来源:https : //gist.github.com/katowulf/6099042。我在J
我一直在设计一个基于Swing的桌面RPG程序,以促进带有GUI控制元素的基于文本的角色扮演。 为了促进这一点,每个正在运行的客户端都会获得一个带有所有重要JFrames的主桌面(托管客户端上的“GM Desktop”和远程客户端上的“Player Desktop”)。此外,GM和Players都可以为角色打开“透视桌面”,为他们提供一个单独的JDesktopPane,其中包含提供该角色视角的“角
相对来说,我是git的新手。我们的组织使用叉子
我用intelliJ从git回购中创建了一个新项目。像这样 我输入了回购地址,一切都很好。代码已下载,并且都是最新的。 我在intelliJ中创建了一个新分支 我所做的唯一更改是添加一个.gitignore文件。 我做了一个promise 看起来还可以。现在,当我试图推动回购协议时,它失败了,出现了一个错误 我不确定这是怎么可能的,因为我刚刚从这个链接创建了这个项目。
我的mac电脑中没有internet连接。我需要使用docker pull。我的想法是,我将使用docker拉入我的一台连接互联网的mac电脑,然后将其复制到没有互联网连接的mac电脑上。如何复制?