DataGrid的不具约束力正确

问题描述:

我有一个页面,包含两个DataGrids一个Tabcontrol。我能够绑定第一个,没有一个搭便车,但第二个将不会收到任何数据没有马丁我尝试。我觉得这可能是由于与DataContext有关,但我仍然不确定。DataGrid的不具约束力正确

这是我结合我的第一个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结合。

+0

使用https://snoopwpf.codeplex.com/并检查绑定和DataContext的在运行时 – blindmeis

在你的第一个DataGrid您是从方法绑定集合。
private async void FillDataGrid()

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

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

有可能是一个问题,因为“这”在你的第二个方法(这是一个事件处理程序)指向这引起了该事件,而不是窗口对象像第一种方法的对象。

对不起,我没能在注释中。我还没有足够的声望来做到这一点。

希望这会有所帮助。

UPDATE 没有看到整个代码,我找不到真正的问题。以下内容可能有点帮助
@ProgrammingDude是正确的。 this是指它所属的类。

DataContext = this; 

上面一行结合与DataContext你的类(this指向)。这使得数据网格与this类的成员结合
1.确保事件处理程序FillContactsDataGrid是类this指向
2.确保对象ContactsICollectionView是类的一个成员,其this指向
内部 3.是ContactsICollectionView属性?

+0

你说得它正在一个TabItem的点击来完成。你有什么建议改变这个? – CBreeze

+0

即使你在参加活动,这仍然应该指向我相信的班级的实例。 https://msdn.microsoft.com/en-us/library/dk1507sz.aspx – ProgrammingDude

+0

@ProgrammingDude你是对的。这指向了班级。 –