[英]DataTable binding to DataGrid WPF
XAML文件:
<DataGrid ItemsSource="{Binding Items}" x:Name="ItemsDataGrid" Margin="0,30,0,0" AutoGenerateColumns="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Sl. No." MinWidth="125" />
<DataGridTextColumn Header="Name" MinWidth="200" />
<DataGridTextColumn Header="Total Quantity" MinWidth="200" />
<DataGridTextColumn Header="Remaining" MinWidth="200" />
<DataGridTextColumn Header="Cost/Each" MinWidth="200" />
</DataGrid.Columns>
</DataGrid>
XAML.CS文件:
private void Page_Loaded_1(object sender, RoutedEventArgs e)
{
_itemsViewModel = new ItemsViewModel();
this.DataContext = _itemsViewModel;
}
ViewModel.cs文件:
private DataTable _itemsList;
private List<ItemsModel> ItemsModel;
public DataTable ItemsList
{
get { return _itemsList; }
set
{
_itemsList = value;
OnPropertyChanged("ItemsList");
}
}
private List<ItemsModel> _items;
public List<ItemsModel> Items
{
get { return _items; }
set
{
_items = value;
OnPropertyChanged("Items");
}
}
public ItemsViewModel()
{
LoadItems();
}
private void LoadItems()
{
CFunctions cFunctions = new CFunctions();
ItemsList = cFunctions.GetItems();
ItemsModel = new List<ItemsModel>();
for (int i = 0; i < ItemsList.Rows.Count; i++)
{
ItemsModel.Add(new ItemsModel()
{
SlNo = int.Parse(ItemsList.Rows[i].ItemArray[0].ToString()),
ItemName = ItemsList.Rows[i].ItemArray[1].ToString(),
Quantity = int.Parse(ItemsList.Rows[i].ItemArray[2].ToString()),
Remaining = int.Parse(ItemsList.Rows[i].ItemArray[3].ToString()),
Cost = int.Parse(ItemsList.Rows[i].ItemArray[4].ToString())
});
}
Items = ItemsModel;
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
Model.cs文件:
class ItemsModel
{
public int SlNo { get; set; }
public int Quantity { get; set; }
public int Cost { get; set; }
public int Remaining { get; set; }
public String ItemName { get; set; }
}
如果AutoGenerateColumns="True"
它将创建列并将数据添加到创建的那些列中,例如:
如果为false,则DataGrid为空。
这是我做的正确方法吗? 为什么它不绑定到已经创建的列?
您缺少:
Binding="{Binding Description}"
每个列定义上的属性。 您必须将它们显式链接到模型类属性。
如Digitlafront所说,您需要设置绑定
<DataGrid ItemsSource="{Binding Items}" x:Name="ItemsDataGrid" Margin="0,30,0,0"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding SlNo, Mode=OneWay}" Header="Sl. No." MinWidth="125" />
<DataGridTextColumn Binding="{Binding ItemName}" Header="Name" MinWidth="200" />
<DataGridTextColumn Binding="{Binding Quantity} Header="Total Quantity" MinWidth="200" />
<DataGridTextColumn Binding="{Binding Remaining} Header="Remaining" MinWidth="200" />
<DataGridTextColumn Binding="{Binding Cost} Header="Cost/Each" MinWidth="200" />
</DataGrid.Columns>
</DataGrid>
您还应根据需要设置Mode = TwoWay或OneWay。 我将使用ObservableCollection而不是List。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.