[英]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.