繁体   English   中英

wpf Datagrid:wpf datagrid中的组合框集成

[英]wpf Datagrid:Combobox Integration in wpf datagrid

我有一个带有2列项目的Datagrid项目,分别为“购买率”。该项目列是一个DatagridCombobox列,现在我想从我的项目数据库表中将所有项目添加到该组合框中。如何绑定它,也如何表示该项目收藏在我的物体上?

我的Xaml是:

 <my:DataGrid Name="dgReceiveInventory" ItemsSource="{Binding}"   SelectionUnit="Cell"   AutoGenerateColumns="False"  >
      <my:DataGrid.Columns>
        <!--3-Product Column-->
                    <my:DataGridComboBoxColumn  Header="Product Name" Width="200" Binding="{Binding ProductName}" IsReadOnly="True"> <my:DataGridComboBoxColumn
       <!--7-Purchase Rate Column-->
                    <my:DataGridTextColumn Header="Purchase Rate" ElementStyle="{StaticResource TextBlockContentRightAlign}" Width="100" Binding="{Binding PurchaseRate}" IsReadOnly="True"></my:DataGridTextColumn>
      </my:DataGrid.Columns>
 </my:DataGrid>

我的课是:

 class clsItems : INotifyPropertyChanged, IDataErrorInfo
{
     private string _ProductName;
     private decimal _PurchaseRate;

    public string ProductName
    {
        get { return _ProductName; }
        set
        {
            _ProductName = value;
            OnPropertyChanged("ProductName");
        }
    }

    public decimal PurchaseRate 
    {
        get { return _PurchaseRate; }
        set
        {
            _PurchaseRate = value;
            OnPropertyChanged("PurchaseRate");
        }
    }
}

您必须绑定到ObservableCollection<T>

首先,您需要将数据库中的所有项目添加到ViewModel中的ObservableCollection<clsItem>属性中,或添加到后面的代码中(不知道您是否在使用MVVM,但我强烈建议您这样做)。 然后,将DataBind连接到ViewModel或后面的代码。 之后,将ItemsSource属性设置为ObservableCollection

这是一个非常简单的示例代码(不在MVVM中):

背后的代码:

public partial class MainWindow : Window
{
    //This is the Collection you will DataBind your ComboBox to
    public ObservableCollection<clsItems> ItemsCollection { get; set; }

    public MainWindow()
    {
        this.ItemsCollection = new ObservableCollection<clsItems>
        {
            new clsItems()
            {
                ProductName = "Product 1",
                PurchaseRate = 10
            },
            new clsItems()
            {
                ProductName = "Product 2",
                PurchaseRate = 20
            }
        };

        InitializeComponent();
    }
}

XAML文件:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"
        Height="350"
        Width="525"
        DataContext="{Binding RelativeSource={RelativeSource Self}}">
    <StackPanel>
        <DataGrid
                  ItemsSource="{Binding Path=ItemsCollection}"
                  SelectionUnit="Cell"
                  AutoGenerateColumns="False">
            <DataGrid.Columns>
                <!--3-Product Column-->
                <DataGridTextColumn  Header="Product Name"
                                         Width="200"
                                         IsReadOnly="True"
                                         Binding="{Binding ProductName}">
                    <!--7-Purchase Rate Column-->
                </DataGridTextColumn>
                <DataGridTextColumn Header="Purchase Rate"
                                    Width="100"
                                    Binding="{Binding PurchaseRate}"
                                    IsReadOnly="True">
                </DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>
    </StackPanel>
</Window>

我们在这里做什么? 首先,我们将Window的DataContext设置为其自身(在MVVM中,您将绑定到ViewModel)。 这样我们就可以访问窗口的公共属性。 其次,我们将ComboBox的ItemsSource属性设置为我们在CodeBehind文件中定义的ObservableCollection属性。 第三,我们将DisplayMember路径设置为ProductName属性。 如果我们不这样做,则ComboboBox只会显示WPFApplication1.clsItems,而不显示集合中Item的名称。 最后,我们将SelectedIndex设置为零,以便ComboBox将显示一个项目。 当然,您也可以将SeletedIndex(或更好的SelectedItem)数据绑定到文件后面代码中的属性,并进一步处理用户选择的数据

这样,您只需更改基础集合,它将自动反映在视图的ComboBox中。

我希望这有帮助。 您可以在此处找到有关数据绑定的更多信息

PS我只是将clsItems重命名为Items,应该清楚Items是一个类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM