【问题标题】:Why DataGrid doesn't display sample design-time data?为什么 DataGrid 不显示示例设计时数据?
【发布时间】: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


【解决方案1】:

编辑:没关系——你打败了我;虽然我很好奇我的改变是否也会奏效。

我认为SampleSaleData.xaml的末尾应该有一个&lt;/local:SampleSale &gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-07
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    相关资源
    最近更新 更多