问题描述
我有问题。 TreeListView 显示来自 db 的项目。树中的节点可以编辑。 XAML 片段示例(自定义编辑器)...
<dxg:GridColumn.EditFormTemplate>
<DataTemplate>
<StackPanel>
<dxe:ListBoxEdit ShowBorder="False" Background="{x:Null}" Selectedindex="{Binding Path=RowData.source.Row.Dir}" x:Name="lbButtonIndex" Margin="0,5">
<dxe:ListBoxEditItem Content="Текстовой фрагмент"/>
<dxe:ListBoxEditItem Content="Директория" Margin="6,0"/>
<dxe:ListBoxEdit.StyleSettings>
<dxe:RadioListBoxEditStyleSettings/>
</dxe:ListBoxEdit.StyleSettings>
<dxe:ListBoxEdit.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</dxe:ListBoxEdit.ItemsPanel>
</dxe:ListBoxEdit>
<dxe:MemoEdit Name="PART_Editor" Memotextwrapping="Wrap" ShowIcon="False" textwrapping="Wrap" Printtextwrapping="Wrap">
<dxe:MemoEdit.EditTemplate>
<ControlTemplate>
<dxe:MemoEdit Name="MemoEditName" ShowIcon="False" EditValue="{Binding Path=Source.Row.Name,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True }"/>
</ControlTemplate>
</dxe:MemoEdit.EditTemplate>
</dxe:MemoEdit>
</StackPanel>
</DataTemplate>
</dxg:GridColumn.EditFormTemplate>
通过事件,我们处理添加一个新节点(在 xaml 中的相同位置)
<dxmvvm:Interaction.Behaviors>
<dxmvvm:EventToCommand EventName="NodeUpdated" Command="{Binding Path=UpdateCommand}" CommandParameter="{Binding ElementName=view}"/>
</dxmvvm:Interaction.Behaviors>
我用代码处理这个事件
public static void Add(TreeListView tree)
{
Diagnos model = (Diagnos)tree.Focusednode.Content;
TreeListNode node = new TreeListNode() { Content = new Diagnos() { Dir = 0,Name = "Новый" }};
if (model.Dir == 1) // директория
{
tree.Focusednode.Nodes.Add(node);
}
else
{
tree.Focusednode.ParentNode.Nodes.Add(node);
}
tree.Focusednode = node;
tree.ShowEditForm();
}
在焦点行上,创建一个新节点,如果是目录,则直接在其中,如果是“文件” - 在包含它的文件夹中,并打开编辑器。所以有什么问题。如果目录包含相对较少的元素,则一切正常。 correctly
如果在目录中 20-30 项,则打开时出错 error
这可能与虚拟化有关。例如,使用焦点在第一项上,tree.Focusednode = tree.Focusednode.Nodes [10] (1 ...10),那么它工作正常,否则如果 Nodes [20](从 14 到 30)在范围内30个项目,然后错误。和虚拟化有关系吗?如何加载缺失的元素?可能原因不同。我会感谢那些回答的人。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)