我有一个页面的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
我绑定的地方我错了。
答案 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.确保对象ContactsICollectionView
是this
指向的类的成员
3. ContactsICollectionView
是属性吗?