我在网上找到了this tutorial,这正是我想要做的,但教程没有解释如何将代码后面的数据加载到组合框中。我知道如何实现这个目标吗?
基本上我想在数据网格中使用多列组合框,当用户选择一个项目时,它只显示其中一个值,而不是两者。
<DataGrid x:Name="DGOrders" Margin="30" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding OrderID}" Header="Order ID" />
<DataGridTemplateColumn Header="User" Width="200">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox SelectedValue="{Binding UserID}" SelectedValuePath="UserID" DisplayMemberPath="CompanyName" HorizontalContentAlignment="Stretch" ItemsSource="{Binding}" >
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Margin="5" Grid.Column="0" Text="{Binding UserID}"/>
<TextBlock Margin="5" Grid.Column="1" Text="{Binding CompanyName}"/>
<TextBlock Margin="5" Grid.Column="2" Text="{Binding UserName}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
答案 0 :(得分:1)
我不确定你的意思只显示其中一个值,而不是两者都有,但我希望一旦我告诉你如何正确绑定DataGrid
中的属性,首先解释它,首先你需要确保你的模型看起来像这样:
public class Order
{
public string OrderId { get; set; }
public string SelectedUserId { get; set; }
}
public class User
{
public string UserId { get; set; }
public string CompanyName { get; set; }
public string UserName { get; set; }
}
然后在后面的代码中创建两个collectionw来保存用户列表和代表DataContext
和ComboBox
的{{1}}的订单列表:
DataGrid
您可以考虑实施 private ObservableCollection<Order> _ordersCollection = new ObservableCollection<Order>()
{
new Order()
{
OrderId = "1",
SelectedUserId = "2"
} ,new Order()
{
OrderId = "2",
SelectedUserId = "3"
}
};
public ObservableCollection<Order> OrdersCollection
{
get
{
return _ordersCollection;
}
set
{
if (_ordersCollection == value)
{
return;
}
_ordersCollection = value;
OnPropertyChanged();
}
}
private ObservableCollection<User> _usersCollection = new ObservableCollection<User>()
{
new User()
{
UserId = "1",
UserName = "Name1",
CompanyName = "Company1"
} ,new User()
{
UserId = "2",
UserName = "Name2",
CompanyName = "Company2"
} ,new User()
{
UserId = "3",
UserName = "Name3",
CompanyName = "Company3"
}
};
public ObservableCollection<User> UsersCollection
{
get
{
return _usersCollection;
}
set
{
if (_usersCollection == value)
{
return;
}
_usersCollection = value;
OnPropertyChanged();
}
}
界面,以便每次更新集合时都会通知用户界面。
现在在用户界面中,确保您的主窗口INotifyPropertyChanged
使用此设置为代码隐藏
DataContext
然后正确绑定属性:
DataContext="{Binding RelativeSource={RelativeSource Self}}"
你最终会得到像这样的东西