如何绑定到集合2深?

时间:2014-02-13 22:41:40

标签: .net wpf combobox wpf-controls

我有以下集合结构,需要将组合框绑定到它:

MainCollection.Items

项目包含我想在组合框中显示为选项的元素列表。 MainCollection的类型为List。项目类型为List。 Item类上有一个Name属性,我想在组合框中显示。

布局将设置为网格。每行都有一个组合框。

我不确定如何访问Items集合中Item元素的属性。

<ComboBox ItemsSource="{Binding MainCollection}"></ComboBox>

应如何设置?

1 个答案:

答案 0 :(得分:0)

所以如果我正确理解了这个问题,你想拥有一个DataGrid,每行包含一个Combobox,里面可用的值必须是 List Items <中的Item对象的Name属性/ em>的

你没有说过想要在每一行显示哪种数据,让我们来看一个简单的用户:

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Item Item { get; set; }
}

使用具有名称的项目(让我们为示例保持简单):

public class Item
{
    public string Name { get; set; }
}

现在我们有了模型,我们可以使用随机的Users和Items设置DataContext:

public partial class MainWindow : Window
{
    // Could also be
    // public ObservableCollection<Item> Items { get; set; }
    public List<Item> Items { get; set; }
    public List<User> Users { get; set; }

    public MainWindow()
    {
        InitializeComponent();

        // Creating our list of Items
        Items = new List<Item> { 
            new Item { Name = "firstItem" },
            new Item { Name = "secondItem" },
            new Item { Name = "thirdItem" },
        };

        // Somes users for the example
        Users = new List<User>{
            new User { Id = 1, Name = "Bill", Item = new Item { Name = "firstItem" }},
            new User { Id = 2, Name = "Steeve", Item = new Item { Name = "secondItem" }}
        };

        // Don't forget to set the datacontext
        DataContext = this;
    }
}

现在是XAML:

<Grid>
    <DataGrid Name="testGrid" AutoGenerateColumns="False" ItemsSource="{Binding Users}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Id" Binding="{Binding Id}"/>
            <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
            <DataGridComboBoxColumn 
                DisplayMemberPath="Name"
                SelectedValuePath="Name"
                SelectedValueBinding="{Binding Item.Name}"
                Header="Item">
                <DataGridComboBoxColumn.ElementStyle>
                    <Style TargetType="{x:Type ComboBox}">
                        <Setter Property="ItemsSource" Value="{Binding Path=Items, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
                    </Style>
                </DataGridComboBoxColumn.ElementStyle>
                <DataGridComboBoxColumn.EditingElementStyle>
                    <Style TargetType="{x:Type ComboBox}">
                        <Setter Property="ItemsSource" Value="{Binding Path=Items, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
                    </Style>
                </DataGridComboBoxColumn.EditingElementStyle>
            </DataGridComboBoxColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

结果:

Combobox in datagrid

希望您正在寻找的答案:)