繁体   English   中英

MasterDetails自定义控件-WPF

[英]MasterDetails Custom Control - WPF

我想创建一个可重复使用的自定义WPF控件,该控件将执行以下操作:

我希望它公开MasterContent的属性和ExpandedDetails的属性。 当我运行该应用程序时,我希望它仅显示MasterControl的详细信息,就像显示数据网格一样。 当我单击一个项目时,我希望它展开并显示ExpandedDetails的详细信息。

我举一个例子:假设我有一个客户类,并且它具有Orders属性。

显示控件时,它将显示:

(好吧,我仍然无法发布图片,但是我认为从说明中可以很清楚地看出来)

现在,假设可以选择每一行。 如果我选择第2行,则第2行会扩展并显示该行中Person描述的顺序。 扩展部分将显示在第2行和第3行之间。当我再次单击它时,订单将消失,因此第2行和第3行之间没有间隙。

在我的情况下,主内容属性将是没有订单的人员详细信息,而ExpandedDetails将是订单本身。

您能否指导我如何开始实施此方法或给我一些很好的阅读材料。 我熟悉Master Details Pattern:我知道如何选择Person,然后在单独的DataGrid中显示他的命令,但是我如何将其实现为可重用控件,尤其是扩展部分。 谢谢!

据我所知,您甚至可能不需要自定义控件。 您可以看一下此CodeProject文章 ,它将为您提供如何使用RowDetailTemplate以及如何在DataGrid上下文中使用它的示例。 这样,您可以有一个DataGrid来显示您的主数据,并使用RowDetails来显示完全不同的内容,但取决于您在主DataGrid中的选择。

如果您在该项目中寻找它,它的外观大致如下:

<DataGrid Name="dataGrid1"                
    RowDetailsTemplate="{StaticResource RowDetailTemplate}" >
    <DataGrid.RowHeaderTemplate>
        <DataTemplate>
            <ToggleButton x:Name="RowHeaderToggleButton"
                Click="ToggleButton_Click"
                Cursor="Hand" />
        </DataTemplate>
    </DataGrid.RowHeaderTemplate>
</DataGrid>       

我不完全了解您背后的意思

MasterContent的属性和ExpandedDetails的属性

您的意思是您的控件将在代码中包含这些属性,或者应该显示为“属性”? 因为在第一种情况下,您必须在焦点的任何更改上都设置ExpandedDetails-我认为这并不是您真正的意思。

通常,这种行为(如已经回答的那样)不需要任何特定的控件-您可以仅将容器控件( LisBox等)与自定义数据模板一起使用。

在这种模板中,您可以使用诸如Expander类的Expander容器,也可以在datatemplate上实现自己的触发器(这是ListBox项目的DataTemplate中的IsSelected的WPF触发器示例)。

使用这样的触发器,您甚至可以实现ExpandedDetails的一些惰性UI初始化(具有Visibility ,控件将在每个订单的UI树中)。 只是在项目真正需要它之前,不要为此类复杂问题而烦恼。 有更好的方法来减少性能问题(例如已经嵌入的UI虚拟化- 虚拟化ItemsControl? )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM