[英]SelectedItem not Loading on DataGrid Load
我有一个DataGrid
,有一个选择的Jobs
,用户可以添加/更新/删除。 我的DataGrid
问题是,当数据加载到其中时,我希望它自动在某些TextBoxes
填充DataGrid
第一项的详细信息。 我通过在DataGrid
上为SelectionChanged
事件编写方法来做到这一点;
private void DataGridSelectionChanged(object sender, SelectionChangedEventArgs e)
{
var selectedJob = dataGrid.SelectedItem as JobModel;
//MessageBox.Show(selectedJob.ITName);
if (selectedJob != null)
{
notesTextBox.Text = selectedJob.CaseNotes;
createdPicker.SelectedDate = DateTime.Parse(selectedJob.DateCreated.ToString("yyyy-MM-dd"));
deadlinePicker.SelectedDate = DateTime.Parse(selectedJob.DateDeadline.ToString("yyyy-MM-dd"));
nameTextBox.Text = selectedJob.CaseClient;
itNameComboBox.SelectedItem = selectedJob.ITName;
}
}
这里的问题是,在加载DataGrid
时,不会填充TextBoxes
(和DatePickers
)。 但是,如果我取消注释MessageBox
则数据将正确填写。 这是一个很大的问题,因为如果DataGrid
只有一个作业,那么用户将无法选择它来删除或更新它。 这是DataGrid
本身的XAML
;
<DataGrid x:Name="dataGrid" ColumnWidth="*" IsReadOnly="true"
Margin="10" Grid.ColumnSpan="3" FontSize="18.667"
HeadersVisibility="Column" AutoGenerateColumns="False"
CanUserAddRows="False"
IsSynchronizedWithCurrentItem="True"
EnableRowVirtualization="True"
ItemsSource="{Binding JobsCollectionView}"
MinColumnWidth="0" SelectionChanged="DataGridSelectionChanged">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding Overdue}" Value="1">
<Setter Property="Background" Value="Red"/>
<Setter Property="FontWeight" Value="Bold"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<!--<DataGridTextColumn Header="Case NO" Width="*" Binding="{Binding CaseNumber}"/>!-->
<DataGridTextColumn Header="IT Person" Width="*" Binding="{Binding ITName}"/>
<DataGridTextColumn Header="Case Notes" Width="*" Binding="{Binding CaseNotes}"/>
<DataGridTextColumn Header="Date Created" Width="*" Binding="{Binding DateCreated, StringFormat=dd/MM/yyyy}"/>
<DataGridTextColumn Header="Deadline Date" Width="*" Binding="{Binding DateDeadline, StringFormat=dd/MM/yyyy}"/>
<DataGridTextColumn Header="Employee Name" Width="*" Binding="{Binding CaseClient}"/>
</DataGrid.Columns>
</DataGrid>
以及填充DataGrid
的方法;
public void FillDataGrid()
{
_jobDataService = new JobDataService();
var _jobs = new ObservableCollection<JobModel>();
_jobs = _jobDataService.GetJobList();
JobsCollectionView = CollectionViewSource.GetDefaultView(_jobs);
DataContext = this;
foreach (JobModel currentJob in JobsCollectionView)
{
if (DateTime.Now == currentJob.DateDeadline)
{
currentJob.Overdue = 0;
}
else if (DateTime.Now > currentJob.DateDeadline)
{
currentJob.Overdue = 1;
}
}
}
有什么明显的我想念的东西阻止了SelectionChanged
事件被调用吗? 我发现奇怪的是,如果我取消注释MessageBox
话,它将按预期工作。
我已经通过完全删除SelectionChanged
事件来回答了这个问题。 相反,我像这样将用户界面元素绑定到XAML
。
<TextBox x:Name="notesTextBox" Text="{Binding SelectedItem.CaseNotes, ElementName=dataGrid}" Margin="5" FontSize="21.333" Grid.Column="1" VerticalAlignment="Center"/>
现在可以正确绑定到XAML
的SelectedItem
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.