将数据绑定到multicolum datagrid-combobox wpf

时间:2016-01-23 17:28:07

标签: c# wpf xaml combobox datagrid

我在网上找到了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>

1 个答案:

答案 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来保存用户列表和代表DataContextComboBox的{​​{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}}"

你最终会得到像这样的东西

enter image description here