【问题标题】:Getting error while dropping an item into treeview将项目放入树视图时出错
【发布时间】:2012-02-12 06:13:19
【问题描述】:

我正在使用 Telerik 的 Silverlight RadControls 中的 RadTreeView。我的 RadTreeView 的 XAML 如下:

       <telerik:RadTreeView x:Name="treeView1" IsDragDropEnabled="True" Margin="0,0,444,0" ItemsSource="{Binding SectionList}">
           <telerik:RadTreeView.ItemTemplate>
                <telerik:HierarchicalDataTemplate x:Name="defaultSectionName" ItemsSource="{Binding Questions, Mode=TwoWay}">
                    <telerik:HierarchicalDataTemplate.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Question1, Mode=TwoWay}"/>
                        </DataTemplate>
                    </telerik:HierarchicalDataTemplate.ItemTemplate>
                </telerik:HierarchicalDataTemplate>
            </telerik:RadTreeView.ItemTemplate>
        </telerik:RadTreeView>
        <telerik:RadTreeView x:Name="treeView2" IsDragDropEnabled="True" Margin="410,0,0,0" ItemsSource="{Binding SelectedSectionList}" >
            <telerik:RadTreeView.ItemTemplate>
                <telerik:HierarchicalDataTemplate x:Name="SelectedSectionName" ItemsSource="{Binding Questions, Mode=TwoWay}">
                    <telerik:HierarchicalDataTemplate.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Question1, Mode=TwoWay}"/>
                        </DataTemplate>
                    </telerik:HierarchicalDataTemplate.ItemTemplate>
                </telerik:HierarchicalDataTemplate>
            </telerik:RadTreeView.ItemTemplate>
        </telerik:RadTreeView>

我有如下火灾事件:

  private void OnDropQuery(object sender, DragDropQueryEventArgs e)
    {

            RadTreeViewItem destinationItem = e.Options.Destination as RadTreeViewItem;
            object source = this.GetItemFromPayload<object>(e.Options.Payload);
            object target = destinationItem != null ? destinationItem.Item : null;
            DropPosition position = destinationItem != null ? destinationItem.DropPosition : DropPosition.Inside;

            if (source != null && target != null)
            {
                Section sourceSection = source as Section;
                Section targetSection = target as Section;
                Question sourceQuestion = source as Question;
                Question targetQuestion = target as Question;

                if (sourceSection != null)
                {
                    e.QueryResult = false;
                    return;
                }

                if (sourceQuestion != null)
                {
                    if (sourceQuestion != null && targetQuestion != null && object.ReferenceEquals(sourceQuestion, targetQuestion))
                    {
                        e.QueryResult = false;
                        return;
                    }

                    if (targetQuestion != null && position == DropPosition.Inside)
                    {
                        e.QueryResult = false;
                        return;
                    }

                    if (position != DropPosition.Inside && targetQuestion == null)
                    {
                        e.QueryResult = false;
                        return;
                    }
                }
            }
            else
            {
                e.QueryResult = false;
                return;
            }
            e.QueryResult = true;

    }

    private T GetItemFromPayload<T>(object payload)
    {
            IEnumerable draggedItems = payload as IEnumerable;
            if (draggedItems != null)
            {
                return draggedItems.OfType<T>().FirstOrDefault();
            }

        return default(T);
    }

但是当我尝试放弃问题时,我得到了 NullReferenceException。我该如何解决这个问题?

【问题讨论】:

  • 您尚未提供所有代码。大概你有 Section 和 Question 视图模型类——它们包含什么? OnDropQuery 处理程序是如何连接的?这个OnDropQuery 方法在哪里 - 例如,它是否在包含树视图的 UserControl 的代码隐藏中?
  • OnDropQuery 在 childWindow 后面的代码中。部分类包含不同类型的部分,例如:食品部分....等。问题类包含特定部分的明智问题,例如:食物新鲜吗?等等... onDropQuery 在构造函数中被调用,例如:public MainWindow() { this.treeView1.AddHandler(RadDragAndDropManager.DropQueryEvent, new EventHandler&lt;DragDropQueryEventArgs&gt;(OnDropQuery), true); this.treeView2.AddHandler(RadDragAndDropManager.DropQueryEvent, new EventHandler&lt;DragDropQueryEventArgs&gt;(OnDropQuery), true); }
  • 你仍然没有提供足够的细节让我能够重现你的错误。 SectionQuestion 类的代码在哪里? (如果错误发生在其中一个中,你就没有帮助我们。)另外,你能发布你得到的 NullReferenceException 的堆栈跟踪吗?最后,请避免在 cmets 中发布过多的代码;相反,请编辑您的问题以添加代码。

标签: c# asp.net silverlight telerik mvvm-light


【解决方案1】:

我解决了。我只是将这段代码放在 try catch 块中并更改了代码:

if (sourceQuestion != null && targetQuestion != null && object.ReferenceEquals(sourceQuestion, targetQuestion))
                    {
                        sourceSection.Questions.Remove(sourceQuestion);
                        targetSection.Questions.Add(sourceQuestion);
                        e.QueryResult = false;
                        return;
                    }

就是这样。它正在工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 2018-07-22
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多