C#Threadpool创建UI元素

Wes*_*ley 1 c# wpf multithreading threadpool

我正在通过数据绑定更新列表框,我试图插入的一个列是一个复选框.此更新由线程池处理,我能够正确插入数据,复选框除外.当我创建复选框时,它显示xaml而不是checkbox元素.即

System.Windows.Controls.Checkbox内容:IsChecked:False

的定义 NotesReminderViewDetails

private struct NotesRemindersViewDetails
{
    public string NoteReminderID { get; set; }
    public string NoteReminderEnterDate { get; set; }
    public string NoteReminderDueDate { get; set; }
    public string NoteReminderConents { get; set; }
    public CheckBox NoteReminderCompleted { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是我用来更新列表视图的代码.NoteReminderType是一个包含所有注释/提醒信息的结构.

NoteReminderType noteType = noteReminder.NoteReminderDetails;

NotesRemindersViewDetails noteReminderDetails = new NotesRemindersViewDetails();
noteReminderDetails.NoteReminderID = noteType.UserFriendlyNoteReminderID.ToString();
noteReminderDetails.NoteReminderEnterDate = noteType.InsertionDate.ToShortDateString();
noteReminderDetails.NoteReminderDueDate = noteType.DueDate.ToShortDateString();
noteReminderDetails.NoteReminderConents = noteType.Description;

listViewNotesReminders.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate()
{
    noteReminderDetails.NoteReminderCompleted = new CheckBox();

    listViewNotesReminders.Items.Add(noteReminderDetails);
}));
Run Code Online (Sandbox Code Playgroud)

我需要更改什么才能显示复选框而不是xaml形成线程池线程?

编辑
这是listview的xaml代码

<ListView.View>
    <GridView>
        <GridViewColumn Header="ID" Width="20" DisplayMemberBinding="{Binding Path=NoteReminderID}" />
        <GridViewColumn Header="Entered Date" Width="Auto" DisplayMemberBinding="{Binding Path=NoteReminderEnterDate}" />
        <GridViewColumn Header="Due Date" Width="75" DisplayMemberBinding="{Binding Path=NoteReminderDueDate}" />
        <GridViewColumn Header="Note Contents" Width="300" DisplayMemberBinding="{Binding Path=NoteReminderConents}" />
        <GridViewColumn Header="Completed" Width="Auto" DisplayMemberBinding="{Binding Path=NoteReminderCompleted}" />
    </GridView>
</ListView.View>
Run Code Online (Sandbox Code Playgroud)

Jac*_*cob 5

您应该定义一个模板,而不是将UI元素(CheckBox)放入数据中ListView,这样您就可以将列呈现为一个复选框,只需使用一个Boolean数据即可.CheckBox在数据中使用a 是混合UI和数据层.

更新:

以下是如何制作自定义列模板的示例(未经过测试):

<ListView.View>
    <GridView>
        <GridViewColumn Header="ID" Width="20" 
                        DisplayMemberBinding="{Binding Path=NoteReminderID}" />
        <GridViewColumn Header="Entered Date" Width="Auto" 
                        DisplayMemberBinding="{Binding Path=NoteReminderEnterDate}" />
        <GridViewColumn Header="Due Date" Width="75" 
                        DisplayMemberBinding="{Binding Path=NoteReminderDueDate}" />
        <GridViewColumn Header="Note Contents" Width="300" 
                        DisplayMemberBinding="{Binding Path=NoteReminderConents}" />
        <GridViewColumn Header="Completed" Width="Auto">
            <GridViewColumn.CellTemplate>
                <DataTemplate>
                    <CheckBox IsChecked="{Binding Path=NoteReminderCompleted}"/>
                </DataTemplate>
            </GridViewColumn.CellTemplate>
        </GridViewColumn>
    </GridView>
</ListView.View>
Run Code Online (Sandbox Code Playgroud)