簡體   English   中英

基於列表框的自定義WPF控件

[英]Custom wpf control based on listbox

我已經基於具有兩個依賴項屬性的列表框創建了一個非常基本的自定義控件。 這些依賴項屬性稱為SourceASourceB 公開了這兩個依賴項屬性供用戶綁定。我的目標是為集合提供多個綁定槽。 到目前為止效果很好。

在我的自定義控件中,我將這兩個列表合並為一個,然后顯示在列表框中,如下圖所示。

我的問題?

我需要一種將它們組合后將它們彼此區分開的方法。 因此,當我擴展自定義控件時,我仍然在后端知道列表中的哪些項來自SourceA或SourceB。 原因是這樣,我可以向SourceA vs SourceB中的項目添加特定功能。

我可以在自定義控件中標記兩個傳入列表項嗎? 枚舉,接口或包裝是解決方案嗎?

DropBox解決方案: https ://www.dropbox.com/s/74su534n1szk91b/NexusEditor_03.zip ? dl =0

<Grid>
    <nexus:NexusEditor 
        SourceB="{Binding ItemList}"
        SourceA="{Binding GroupList}"/>
</Grid>

謝謝

好吧,根據您當前的實現,您將必須有一種方法來標識對象的類型,而不管其來源如何。 因此,最簡單的方法是創建一個由您控制的包裝對象,並可以添加想要跟蹤對象的任何信息。 像這樣:

public class NexusItem
{
    public object Item { get; set; }
    public Brush Background { get; set; }
}

然后修改您的UpdateItems方法以添加跟蹤數據:

        private static void UpdateItems(NexusEditor editor)
    {
        editor.Items.Clear();

        var sourceB = editor.SourceB as IEnumerable;
        if (sourceB != null)
        {
            foreach (object obj in sourceB)
            {
                var item = new NexusItem() { Item = obj, Background = new SolidColorBrush(Colors.Green) };
                editor.Items.Add(item);
            }
        }

        var sourceA = editor.SourceA as IEnumerable;
        if (sourceA != null)
        {
            foreach (object obj in sourceA)
            {
                var item = new NexusItem() { Item = obj, Background = new SolidColorBrush(Colors.Red) };
                editor.Items.Add(item);
            }
        }
    }

現在,您可以更新模板以綁定到所需的數據:

    <DataTemplate>
    <TextBlock Background="{Binding Background}" Grid.Column="1" Grid.Row="1" 
                Text="{Binding Item.Name}" 
                HorizontalAlignment="Center" VerticalAlignment="Center" />
    </DataTemplate>

在此處輸入圖片說明

話雖如此,我認為您將基於當前的控制體系結構遇到其他問題和限制,因為您已經對模板中的傳入對象進行了假設。 也許您不會,但這恰好可以滿足您的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM