【发布时间】:2012-11-26 17:21:57
【问题描述】:
我正在尝试将一些示例数据加载到我的UserControl 以在设计时工作。
这是一个将 OrderItems 集合和一个数字关联起来的销售:
using System;
using System.Collections.ObjectModel;
namespace MiPaladar.SampleData
{
public class SampleSale
{
public int Number { get; set; }
public ObservableCollection<SampleLineItem> OrderItems { get; set; }
}
}
问题是绑定到Number 属性的TextBox 显示它很好,但是绑定到OrderItems 集合的DataGrid 是空的,没有显示项目。为什么不呢?
这是SampleLineItem 类:
namespace MiPaladar.SampleData
{
public class SampleLineItem
{
public float Quantity { get; set; }
public float Price { get; set; }
}
}
还有SampleSaleData.xaml:
<local:SampleSale xmlns:local="clr-namespace:MiPaladar.SampleData"
Number="78" >
<local:SampleSale.OrderItems>
<local:SampleLineItem Quantity="1" Price="3.5"/>
<local:SampleLineItem Quantity="2" Price="7"/>
<local:SampleLineItem Quantity="1" Price="8"/>
</local:SampleSale.OrderItems>
最后是我的用户控件:
<UserControl x:Class="MiPaladar.Views.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300" >
<Grid d:DataContext="{d:DesignData /SampleData/SampleSaleData.xaml}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Order Number:" Margin="5"/>
<TextBox Margin="5" Text="{Binding Number}"/>
</StackPanel>
<!--Orderitems-->
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding OrderItems}"
Grid.Row="1" Margin="5" >
<DataGrid.Columns>
<DataGridTextColumn Header="Quantity" Binding="{Binding Quantity}" />
<DataGridTextColumn Header="Price" Binding="{Binding Price, StringFormat=c}" />
</DataGrid.Columns>
</DataGrid>
</Grid>
提前致谢!
【问题讨论】:
-
找到了!只需在代码中初始化 OrderItems 集合。在 XAML 中创建集合时,新项将通过 Add() 方法添加到集合中。 XAML 不会创建新集合。所以,只是这个小修改: ObservableCollection
orderItems = ObservableCollection ();公共 ObservableCollection OrderItems { get { return orderItems; } }
标签: c# .net wpf datagrid user-controls