簡體   English   中英

在WPF C#中填充ComboBox項

[英]Fill ComboBox Items in WPF C#

我有兩個這樣的課程:

public class Instance
{
    /// <summary>
    /// Identity of index
    /// </summary>
    public int Id { get; set; }

    /// <summary>
    /// Items within this group.
    /// </summary>
    public Dictionary<string, ItemRow> Items;

    public Instance()
    {
        //Items = new Dictionary<string, ItemRow>();
        Items = new Dictionary<string, ItemRow>();
    }
}

public class GroupMemory
{
    /// <summary>
    /// Name of the OPC group
    /// </summary>
    public string Name { get; set; }
    /// <summary>
    /// Scan rate for this group.
    /// </summary>
    public string ScanRate { get; set; }
    /// <summary> 
    /// Number of instances for this group.
    /// </summary>
    public int CountOfInstances { get; set; }

    /// <summary>
    /// Instances within this group.
    /// </summary>
    public Dictionary<int, Instance> Instances;
    /// <summary>
    /// Items within this group.
    /// </summary>
    public Dictionary<string, ItemRow> Items;

    /// <summary>
    /// Constructor of GroupMemory class.
    /// </summary>
    public GroupMemory()
    {
        Items = new Dictionary<string, ItemRow>();
        Instances = new Dictionary<int, Instance>();
    }
}

我有一個列表視圖,我在列表視圖的每個項目中綁定了GroupMemory對象。 listview的最后一列是ComboBox,我需要在其中組合groupmemory的每個實例的ID。 例如,如果每個組內存包含兩個實例,並且實例的Id = 1和Id = 2,我想在組合框中顯示1和2作為其項。 我怎樣才能為組合框或其背后的代碼編寫XAML代碼?

這是我的listview的xaml代碼

<ListView.View>
            <GridView>
                <GridViewColumn Header="Name" Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListView}, Converter={StaticResource starWidthConverter}}"  DisplayMemberBinding="{Binding Path=Name}" />
                <GridViewColumn Header="Scan Rate" Width="60" DisplayMemberBinding="{Binding Path=ScanRate}" />
                <GridViewColumn Header="Instances" Width="60" DisplayMemberBinding="{Binding Path=CountOfInstances}" />
                <GridViewColumn Header="Index" Width="100">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox Width="50" ItemsSource="{Binding Instances}" SelectedValue="{Binding Id}" DisplayMemberPath="Id"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>

假設ComboBox的DataContextGroupMemory類的實例,則可以嘗試將ComboBox的ItemsSource綁定到Instances.Values屬性,並將DisplayMemberPath設置為顯示每個Instance Id

<ComboBox ItemsSource="{Binding Instances.Values}"
          DisplayMemberPath="Id"
          SelectedValuePath="Id"/>

您的Instances被聲明為字段,並且不是有效的綁定源 如果要綁定到屬性,應將其轉換為屬性。 將聲明更改為:

public Dictionary<int, Instance> Instances { get; set; }

然后,因為它是Dictionaty<K, V> ,並且每個項目都是KeyValuePair<K, V>類型,其中Key是您的intValue是您的Instance嘗試將DisplayMemberPath更改為Value.Id

<ComboBox ItemsSource="{Binding Instances}" DisplayMemberPath="Value.Id"/>

如果將itemsource綁定到Instances屬性,則可以將DisplayMember和/或valuemember綁定到Key或Value。

它比較簡單

實例是一個KeyValuePair,您需要綁定到Value.Id

但是我也注意到您的兩個類都不實現INotifyPropertyChanged。 您將需要執行此操作,因為這是綁定如何知道您的值已更新的方式。

如果您堅持使用字典,則可能還需要檢出ObservableDictionary。 http://blogs.microsoft.co.il/shimmy/2010/12/26/observabledictionarylttkey-tvaluegt-c/

暫無
暫無

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

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