2014-10-11 172 views
1

我有兩個類這樣的:填充組合框項目

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作爲它的項目。我怎樣才能爲combobox或其代碼behinde編寫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> 
+0

如何你的'ListView'看的那一刻? – dkozl 2014-10-11 06:54:01

+0

@dkozl現在所有的列都有價值,但組合框列沒有項目 – Mohsen 2014-10-11 07:05:42

回答

2

假設組合框的DataContextGroupMemory類的實例,你可以嘗試組合框的ItemsSourceInstances.Values屬性綁定,並設置DisplayMemberPath顯示的每個InstanceId

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

感謝您的回覆,我將它設置爲您的代碼,但它不起作用。主要帖子 – Mohsen 2014-10-11 07:10:47

+0

綁定只能使用public *屬性*。嘗試將'Instances'的定義更改爲屬性*而不是* field *:'public Dictionary Instances {get; set;}' – har07 2014-10-11 07:14:30

+0

Dear @ har07我將我的定義更改爲公共屬性,例如您的給定代碼,但它不再工作:( – Mohsen 2014-10-11 07:30:29

2

我的XAML代碼如果您綁定的ItemSource到實例屬性,然後你可以綁定將DisplayMember和/或valuemember到項或值。

其相對簡單的

實例是一個KeyValuePair,則需要結合Value.Id

但是我也注意到,無論是你的類執行INotifyPropertyChanged。你將需要實現這一點,因爲這是Binding知道你的值已被更新的方式。

如果您被困在使用字典中,您可能還需要查看ObservableDictionary。 http://blogs.microsoft.co.il/shimmy/2010/12/26/observabledictionarylttkey-tvaluegt-c/

+0

感謝戴爾,但它並沒有爲我工作:( – Mohsen 2014-10-11 07:03:24

+0

Instances屬性是一個KeyValuePair。您將需要綁定到Value.Id,這應該讓它工作 – 2014-10-11 07:36:20

+0

謝謝@Dale。我將我的字典更改爲一個列表,它工作正常。感謝您的建議親愛的朋友 – Mohsen 2014-10-11 08:16:16

3

Instances被聲明爲一個字段,它不是一個有效的binding source。如果你想綁定它,你應該將它轉換爲一個屬性。更改聲明:

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

,然後,因爲它是一個Dictionaty<K, V>,每個項目是KeyValuePair<K, V>類型:其中,Key是您intValue是您的Instance嘗試改變DisplayMemberPathValue.Id

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