WPF DataGrid没有加载数据

时间:2016-02-06 16:08:56

标签: wpf datagrid

我是C#和WPF的初学者。 我创建了一个用户控件LogTable.atxml,它包含一个DataGrid并将其添加到MainWindow.xaml。 显示表但未提取内容。 我认为问题是我无法以正确的方式发送Itemsource。 [结果]请帮忙。

   using System;
   using System.Collections.Generic;
   using System.Linq;
   using System.Text;

    namespace TableTest.UserControls
    {
    class Tabledata
    {
    string A{ get; set; }
    string B { get; set; }
    string C { get; set; }

    public Tabledata(string a, string b, string c) 
    {
    A = a;
    B = b;
    C =c;
    }

    }
    }



    namespace TableTest.UserControls
    {
    /// <summary>
    /// Interaction logic for LogTable.xaml
    /// </summary>
    public partial class LogTable : UserControl
    {

    ObservableCollection<Tabledata> list;
    public LogTable()
    {
    InitializeComponent();
    list = getTableDetails();
    this.logGrid.ItemsSource = list;
    }

    private ObservableCollection<Tabledata> getTableDetails()
    {
    ObservableCollection<Tabledata> list= new ObservableCollection<Tabledata>();
    Tabledata data = new Tabledata("aaa", "aaa", "aaa");
    Tabledata data1 = new Tabledata("bbb", "aaa", "aaa");
    Tabledata data2 = new Tabledata("ccc", "aaa", "aaa");
    list.Add(data);
    list.Add(data1);
    list.Add(data2);
    return list;
    }
    }
    }

    public partial class MainWindow : Window
    {
    public MainWindow()
    {
    InitializeComponent();
    }
    }
    }


<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:UserControls="clr-namespace:TableTest.UserControls"       x:Class="TableTest.MainWindow"
        Title="MainWindow" Height="350" Width="525">
    <Grid>

        <UserControls:LogTable x:Name="logtable" HorizontalAlignment="Left" Margin="0,209,0,0" VerticalAlignment="Top" Width="287" Height="111"/>

    </Grid>
</Window>

<UserControl x:Class="TableTest.UserControls.LogTable"
             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" 

             >
    <DataGrid x:Name="logGrid" AutoGenerateColumns="False" 
          Height="290" 
          HorizontalAlignment="Left" 
          VerticalAlignment="Top" Width="290" 
             ItemsSource="{Binding list}"
          >
        <DataGrid.Columns >
            <DataGridTextColumn Binding="{Binding Path=A}" MinWidth="50" Header="Column 1"/>
            <DataGridTextColumn Binding="{Binding Path=B}" MinWidth="50" Header="Column 2"/>
            <DataGridTextColumn Binding="{Binding Path=C}" MinWidth="50" Header="Column 3"/>
        </DataGrid.Columns>
    </DataGrid>
</UserControl>

1 个答案:

答案 0 :(得分:1)

我认为你需要做一些事情 1.您的ItemSource需要绑定到property。所以你的代码应该看起来像

 public partial class LogTable : UserControl
    {

    public ObservableCollection<Tabledata> list {get;set;}
    public LogTable()
    {
    InitializeComponent();
    DataContext=this;
    list = new ObservableCollection<TableData>();
    list = getTableDetails();
    this.logGrid.ItemsSource = list;
    }
  1. 您需要设置用户控件的数据上下文。如果您只是使用codebehind,则可以在usercontrols构造函数中设置DataContext,就像上面的代码一样。但是,将来您可能希望使用mvvm模式并将datacontext设置为您的视图模型。
  2. 注意:如果您想要访问该窗口代码隐藏中的任何信息(或者您希望绑定数据的任何信息),则需要设置datacontext的{​​{1}}。

    Here是阅读mainwindow的好资源。

    更新:刚刚看到您的mvvm。由于您命名为xaml,因此您可以直接在代码中将DataContext设置为Datagrid。但是,由于您没有设置ItemSource,因此可以从datacontext中删除ItemSource={Binding list}。只有在xaml上有list属性时,这才有效。

    更新2 :您还需要在DataContext课程中公开您的媒体资源。然后它会工作

    TableData