我在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有影响,尽管事件是直接在代码隐藏中处理的吗?
后续问题:你们中是否有人经历过同样的事情,财产“消失”了?如果是,您的解决方案是什么?
答案 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 机器中有一些问题,应该解决。