繁体   English   中英

SelectedItem不在DataGrid上加载

[英]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"/>

现在可以正确绑定到XAMLSelectedItem

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM