0

请注意:

  • 对于此示例,列表中的两种类型进行了很多简化,并且必须分开。

  • 不能更改使用 int 作为类型之间的连接。

问题:

给定下面的代码,我如何获得标记为的 ComboBox ???

  • 显示ColorDefs.Name为它的内容。

  • 设置为等于SelectedItem的那个。Models.DisplayColorNumberColorDefs.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>

模型数据类型:

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; }
    }
}

显示颜色定义类型:

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; }
    }
}
4

1 回答 1

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 将是 Model 对象的属性,SelectedValuePath 将指示 DisplayColorDefinition 的哪个属性用于绑定。

于 2013-04-12T15:26:13.927 回答