从代码调用时 TreeListView 节点编辑器出现问题 (DevExpress WPF)

问题描述

我有问题。 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 (将#修改为@)