我有以下集合结构,需要将组合框绑定到它:
MainCollection.Items
项目包含我想在组合框中显示为选项的元素列表。 MainCollection的类型为List。项目类型为List。 Item类上有一个Name属性,我想在组合框中显示。
布局将设置为网格。每行都有一个组合框。
我不确定如何访问Items集合中Item元素的属性。
<ComboBox ItemsSource="{Binding MainCollection}"></ComboBox>
应如何设置?
答案 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>
结果:
希望您正在寻找的答案:)