为什么我的事件参数中的对象缺少属性?

Why are my objects in event args missing properties?

我在 WPF 中遇到过,使用 devexpress,我在代码隐藏中有一个带有事件处理程序的 DragDropManager。当我将一行拖到网格控件上时,将按预期调用事件处理程序。我的问题是包含在事件参数中的控件的大部分定义属性都被问号“?”替换了,所以我无法真正从源代码控件(我从中拖出该行)中获取任何标识信息。 Image of the situation described above.

下面是我的观点的一个片段。该代码段首先包含将行拖到的控件,然后包含从中拖动行的控件。为简单起见,我删除了列。

<dxg:GridControl ItemsSource="{Binding DataViewSheets}" SelectedItem="{Binding SelectedDataViewSheet}"  MaxHeight="300" Height="300" DefaultSorting="Name" x:Name="grc_sheets">
                            <dxg:GridControl.View>
                                <dxg:TableView Name="firstView" AllowBestFit="True" ShowColumnHeaders="True"
                                        ShowVerticalLines="false" ShowHorizontalLines="True" ShowIndicator="False" IsDetailButtonVisibleBinding="{Binding Row.HasChildren, Mode=TwoWay}">
                                </dxg:TableView>
                            </dxg:GridControl.View>
                            <dxmvvm:Interaction.Behaviors>
                                <dxg:GridDragDropManager AllowDrag="False" AllowDrop="True" AllowScrolling="True" Drop="GridDragDropManager_OnDrop"/>
                            </dxmvvm:Interaction.Behaviors>
                            <dxg:GridControl.DetailDescriptor>
                                <dxg:DataControlDetailDescriptor ItemsSourcePath="DataViewAttributes">
                                    <dxg:DataControlDetailDescriptor.DataControl>
                                        <dxg:GridControl SelectedItem="{Binding SelectedDataViewAttributeViewModel}" x:Name="grc_sheetAttributes">
                                            <dxg:GridControl.View>
                                                <dxg:TableView ShowGroupPanel="False" DetailHeaderContent="DataControlDetailDescriptor" AutoWidth="False" ShowVerticalLines="false" ShowHorizontalLines="True" ShowIndicator="False" IsDetailButtonVisibleBinding="{Binding Row.HasChildren, Mode=TwoWay}"></dxg:TableView>
                                            </dxg:GridControl.View>
                                            <dxg:GridControl.DetailDescriptor>
                                                <dxg:DataControlDetailDescriptor ItemsSourcePath="ChildDataViewAttributes">
                                                    <dxg:DataControlDetailDescriptor.DataControl>
                                                        <dxg:GridControl x:Name="grc_childAttributes">
                                                            <dxmvvm:Interaction.Behaviors> </dxmvvm:Interaction.Behaviors>                                              <dxg:GridControl.View>
                                                                <dxg:TableView ShowGroupPanel="False" DetailHeaderContent="DataControlDetailDescriptor" AutoWidth="False" ShowVerticalLines="false" ShowHorizontalLines="False" ShowIndicator="False" IsDetailButtonVisibleBinding="{Binding Row.HasChildren, Mode=TwoWay}"></dxg:TableView>
                                                            </dxg:GridControl.View>
                                                        </dxg:GridControl>
                                                    </dxg:DataControlDetailDescriptor.DataControl>
                                                </dxg:DataControlDetailDescriptor>
                                            </dxg:GridControl.DetailDescriptor>
                                        </dxg:GridControl>
                                    </dxg:DataControlDetailDescriptor.DataControl>
                                </dxg:DataControlDetailDescriptor>
                            </dxg:GridControl.DetailDescriptor>
                        </dxg:GridControl>

<dxg:GridControl ItemsSource="{Binding CurrentDomain.EntityClasses}" x:Name="grc_availableAttributes">
                                <dxg:GridControl.View>
                                    <dxg:TreeListView DataRowTemplateSelector="{StaticResource selector}" TreeDerivationMode="HierarchicalDataTemplate" ShowVerticalLines="False" ShowHorizontalLines="False" ShowIndicator="False"/>
                                </dxg:GridControl.View>
                                <dxmvvm:Interaction.Behaviors>
                                    <dxg:TreeListDragDropManager AllowDrag="True" AllowDrop="False"/>
                                </dxmvvm:Interaction.Behaviors>
                            </dxg:GridControl>

围绕这些 gridcontrol,我有一个 LayoutControl,里面有许多 LayoutGroup,只是为了保持一切就位。

我已经尝试将其提取到一个简化的示例项目中,并请求 DevExpress 支持人员提供帮助,但到目前为止我得到的解决方案没有帮助。提取的示例确实有效,我可以看到 gridcontrol 及其所有属性。然后当我尝试将完全相同的东西放回我原来的项目时,它不再起作用了。唯一的区别是我的视图模型,没有实现我在原始项目中的一些东西。

尽管事件直接在代码隐藏中处理,但我的视图模型真的会对事件参数产生影响吗?

后续问题:你们有没有经历过同样的事情,属性"disappear"?如果是,您的解决方案是什么?

更新:

只是为了好玩,我今天尝试获取 e.SourceControl 的各种属性,看看它们是否真的可以解决(没有更好的词)或者它们最终会抛出异常或为空。 这是我所做的:

private void GridDragDropManager_OnDrop(object sender, GridDropEventArgs e)
    {
        var control = e.SourceControl;
        var name = control.Name;
        var draggedRowContent = (EntityAttribute)e.DraggedRows[0];
        ((DataViewViewModel)DataContext).Execute_DropEntityAttribute(e);
    }

正如预期的那样 e.SourceControl 仍然显示“?”对于大多数属性,但是当尝试获取不同的属性时,我实际上得到了预期的结果。即使将控件添加到监视列表中,也会公开更多的属性,而不仅仅是通过调试器查看它。 结论;似乎 Visual Studio 调试器 机器有问题,应该解决。