2013-04-12 60 views
0

請注意,如果:組合框結合基礎上的兩個來源性質的平等選擇項目使用的DataTemplate

  • 的兩種類型的列表被簡化了很多在這個例子中,必須保持獨立。

  • 使用int作爲類型之間的連接無法更改。

問題:

考慮下面的代碼,我如何才能打上???到ComboBox:

  • 顯示ColorDefs.Name作爲其內容。

  • SelectedItem設置爲Models.DisplayColorNumber等於ColorDefs.ColorNumber的那個。

  • 如果選擇更改,更新Models.DisplayColorNumber更新。

在代碼隱藏

public List<ModelData> Models { get; } 
public List<DisplayColorDefinition> ColorDefs { get; } 

DataContext=this; 

XAML:

<ListBox ItemsSource="{Binding Models}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <ComboBox ??? /> 
       <TextBlock Text="{Binding Models, Path=Name}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

ModelData類型:

public class ModelData 
{ 
    private string name; 
    private int displayColorNumber; 

    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 
    public int DisplayColorNumber 
    { 
     get { return displayColorNumber; } 
     set { displayColorNumber = value; } 
    } 
} 

DisplayColorDefinition類型:

public class DisplayColorDefinition 
{ 
    private int colorNumber; 
    private string name; 
    private Color displayColor; 

    public int ColorNumber 
    { 
     get { return colorNumber; } 
     set { colorNumber= value; } 
    } 

    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

    public Color DisplayColor 
    { 
     get { return displayColor; } 
     set { displayColor = value; } 
    } 
} 
+0

您的代碼無法生成。我不明白這一點。 'public string ColorNumber'屬性如何使用後臺字段'private int colorNumber'? 'int'不能隱式地轉換爲/從'string'。 –

+0

糟糕,錯字。現在已經糾正了。 – LJNielsenDk

回答

1

使用的SelectedValue和SelectedValuePath:

<ListBox ItemsSource="{Binding Models}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <ComboBox ItemsSource="{Binding Path=DataContext.ColorDefs, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" 
          DisplayMemberPath="Name" 
          SelectedValue="{Binding Path=DisplayColorNumber}" 
          SelectedValuePath="ColorNumber" 
          /> 
       <TextBlock Text="{Binding Name}" /> 
       <TextBlock Text="{Binding DisplayColorNumber}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

的SelectedValue將模型對象的屬性,並SelectedValuePath將指示要用於該DisplayColorDefinition財產捆綁。

相關問題