为什么event args中的对象缺少属性?

时间:2016-05-29 13:56:06

标签: c# wpf mvvm event-handling devexpress

我在WPF中使用devexpress,我有一个带有代码隐藏中的事件处理程序的DragDropManager。当我将一行拖到网格控件上时,将按预期调用事件处理程序。我的问题是包含在事件args中的控件的大部分定义属性都被问号“?”取代,所以我无法从源代码控件中获取任何识别信息(我从中拖动了行)。 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>

在这些网格控件周围,我有一个LayoutControl,里面有许多LayoutGroups,只是为了保持一切。

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

真的是我的视图模型对事件args有影响,尽管事件是直接在代码隐藏中处理的吗?

后续问题:你们中是否有人经历过同样的事情,财产“消失”了?如果是,您的解决方案是什么?

1 个答案:

答案 0 :(得分:0)

更新

只是为了它的乐趣,我今天尝试获取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 Debugger 机器中有一些问题,应该解决。