簡體   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