1

我是 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

4 回答 4

17

只是对未来的建议。

Visual studio-> Options-> Debugging-> Output Window-> WPF Trace Settings。您可以在此处设置详细级别并在Output窗口中查看有关数据绑定的重要信息。它为我节省了几个小时。

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

所以,你有两种方法:

this.DataContext = _MailCollection

并将绑定更改为:

ItemsSource={Binding}

或者只是将绑定更改为:

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

我还推荐这个PDF 装订备忘单。它缺少一些 WPF 4.5 功能,但仍然有用。

于 2013-04-02T10:03:26.467 回答
1

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

this.DataContext = this;
于 2013-04-02T10:04:35.830 回答
1

尚未将 ObservableCollection 绑定到 DataGrid。

这是解决问题的步骤。

  1. 为您的 DataGrid 定义一个名称。(比方说myDataGrid

  2. 然后在代码隐藏文件的构造函数中插入下面的代码

    myDataGrid.DataContext = this.MailCollection;
    

请查看本教程以了解有关数据绑定的更多信息

于 2013-04-02T10:17:53.523 回答
0

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

于 2016-12-01T08:04:06.433 回答