DataGrid无法正确绑定

时间:2016-01-13 10:38:09

标签: c# wpf data-binding datagrid

我有一个页面的Tabcontrol包含两个DataGrids。我能够顺利地绑定第一个但是第二个不会收到任何数据而不是我尝试的内容。我觉得这可能与DataContext有关,但我仍然不确定。

这是我绑定第一个DataGrid;

的方式
    private async void FillDataGrid()
    {
        var Companies = new ObservableCollection<CompanyModel>();
        var waitWindow = new PleaseWait();

        waitWindow.Show();
        Companies = await ReturnCompanies();
        CompanyICollectionView = CollectionViewSource.GetDefaultView(Companies);
        DataContext = this;

        dataGrid.SelectedIndex = 0;
        waitWindow.Close();
    }

DataGrid本身就是这样;

<DataGrid x:Name="dataGrid" ColumnWidth="*" IsReadOnly="true" 
                      Margin="10" FontSize="14" 
                      HeadersVisibility="Column" AutoGenerateColumns="False" 
                      CanUserAddRows="False" SelectionChanged="DataGridSelectionChanged"
                      IsSynchronizedWithCurrentItem="True"
                      EnableRowVirtualization="True"
                      ItemsSource="{Binding CompanyICollectionView}"
                      MinColumnWidth="0">                       
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Company Name" Binding="{Binding Name}"/>
                        <DataGridTextColumn Header="Town" Binding="{Binding Town}"/>
                        <DataGridTextColumn Header="Post Code" Binding="{Binding Postcode}"/>
                    </DataGrid.Columns>
                </DataGrid>

我的第二个DataGrid以非常相似的方式绑定;

    private async void FillContactsDataGrid(object sender, MouseButtonEventArgs e)
    {
        var Contacts = new ObservableCollection<ContactsModel>();
        var waitWindow = new PleaseWait();

        waitWindow.Show();
        Contacts = await ReturnContacts();
        ContactsICollectionView = CollectionViewSource.GetDefaultView(Contacts);
        DataContext = this;

        contactsDataGrid.SelectedIndex = 0;
        waitWindow.Close();
    }

第二个DataGrid;

<DataGrid x:Name="contactsDataGrid" ColumnWidth="*" IsReadOnly="true" 
                      Margin="10" FontSize="14" 
                      HeadersVisibility="Column" AutoGenerateColumns="False" 
                      CanUserAddRows="False"
                      IsSynchronizedWithCurrentItem="True"
                      EnableRowVirtualization="True"
                      ItemsSource="{Binding ContactsICollectionView}"
                      MinColumnWidth="0"
                      Grid.Row="1" Grid.ColumnSpan="2">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Date" Binding="{Binding ContactDate, StringFormat=\{dd-MM-yyyy\}}"/>
                        <DataGridTextColumn Header="To Person" Binding="{Binding PersonName}"/>
                        <DataGridTextColumn Header="Contract" Binding="{Binding Contract}"/>
                        <DataGridTextColumn Header="Type" Binding="{Binding TypeOfContact}"/>
                        <DataGridTextColumn Header="Made By" Binding="{Binding ContactMadeBy}"/>
                        <DataGridTextColumn Header="Contract Summary" Binding="{Binding ContactDescription}"/>
                    </DataGrid.Columns>
                </DataGrid>

我已经浏览了ContactsICollectionView并打印出了联系人的详细信息并且没有任何问题,所以我知道这些集合正在被正确填充,这只是DataGrids我绑定的地方我错了。

1 个答案:

答案 0 :(得分:1)

在第一个DataGrid中,您将从方法绑定Collection         private async void FillDataGrid()

但对于你的第二个Grid,我想这是来自一个事件(考虑你发布的第二个事件的参数。)。
        private async void FillContactsDataGrid(object sender, MouseButtonEventArgs e)

这是一个事件处理程序吗?

可能存在问题,因为“这个&#39;在你的第二个方法(它是一个事件处理程序)中指向引发该事件的对象而不是第一个方法中的窗口对象。

抱歉,我没有将其作为评论。我还没有足够的声誉做到这一点。

希望这有帮助。

<强>更新 没有看到整个代码我就无法找到真正的问题。以下可能没什么帮助 @ProgrammingDude是对的。 this指的是它所属的类。

DataContext = this;

以上一行将您的班级(this指向)与DataContext绑定在一起。这使得DataGrid与this类的成员绑定 1.确保事件处理程序FillContactsDataGrid位于this指向的类中 2.确保对象ContactsICollectionViewthis指向的类的成员 3. ContactsICollectionView是属性吗?