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
结合。
在你的第一个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
属性?
你说得它正在一个TabItem的点击来完成。你有什么建议改变这个? – CBreeze
即使你在参加活动,这仍然应该指向我相信的班级的实例。 https://msdn.microsoft.com/en-us/library/dk1507sz.aspx – ProgrammingDude
@ProgrammingDude你是对的。这指向了班级。 –
使用https://snoopwpf.codeplex.com/并检查绑定和DataContext的在运行时 – blindmeis