WPF Datagrid绑定不显示值

时间:2013-04-02 09:54:43

标签: c# .net wpf data-binding expression-blend

我完全使用WPF,我尝试在WPF中绑定到datagrid

这是XAML代码

<Grid x:Name="LayoutRoot">
    <Grid HorizontalAlignment="Left" Height="440" VerticalAlignment="Top" Width="632">
        <DataGrid HorizontalAlignment="Left" Height="420" Margin="10,10,0,0" VerticalAlignment="Top" Width="603" ItemsSource="{Binding Source=MailCollection}" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn  Header="id" Binding="{Binding Id}"/>
                <DataGridTextColumn  Header="nazwa" Binding="{Binding Name}"/>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Grid>

这是MailTpl类

public class MailTpl
{
    public string Id { get; set; }
    public string Name { get; set; }
}

以下是我如何绑定

public partial class WindowDataGridTest : Window
{
    ObservableCollection<MailTpl> _MailCollection = new ObservableCollection<MailTpl>();

    public ObservableCollection<MailTpl> MailCollection { get { return _MailCollection; } }

    public WindowDataGridTest()
    {
        _MailCollection.Add(new MailTpl { Id= "abbb", Name = "badfasdf" });
        _MailCollection.Add(new MailTpl { Id = "asasdfasdfdf", Name = "basdfasdfaa" });
        this.InitializeComponent();

        // Insert code required on object creation below this point.
    }
}

我不知道为什么它不起作用。有线索吗?网格没有显示任何值。

4 个答案:

答案 0 :(得分:14)

只是对未来的建议。

Visual studio - &gt;选项 - &gt;调试 - &gt;输出窗口 - &gt; WPF跟踪设置。 在这里,您可以设置详细程度,并在Ouptut窗口中查看有关数据绑定的重要信息。它节省了我几个小时。

现在共鸣。 您将MailCollection声明为Window的公共属性,但默认情况下会对DataContext进行绑定。

所以,你有两种方式:

this.DataContext = _MailCollection

并将绑定更改为

ItemsSource={Binding}

或只是更改绑定到此:

ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}, Path=MailCollection}"

我也推荐这个pdf binding cheat sheet。它缺少一些WPF 4.5功能,但仍然有用。

答案 1 :(得分:1)

你忘了在WindowDataGridTest()构造函数中写这个。

this.DataContext = this;

答案 2 :(得分:1)

你有将ObservableCollection绑定到DataGrid。

以下是解决问题的步骤。

  1. 定义DataGrid的名称。 (让我们说myDataGrid

  2. 然后将下面的代码插入到代码隐藏文件

    的构造函数中
    myDataGrid.DataContext = this.MailCollection;
    
  3. 请查看this tutorial以了解有关数据绑定的更多信息

答案 3 :(得分:0)

我遇到的同样的问题然后我通过增加网格高度来解决它。 确保您的网格高度足以显示数据。