2010-12-30 2 views
1

Я обновляю список через databind, и один из столбцов, которые я пытаюсь вставить, - это флажок. Это обновление обрабатывается threadpool, и я могу вставить данные в порядке, за исключением флажка. Когда я создаю флажок, он отображает xaml вместо элемента checkbox. т.е.C# Threadpool create UI Element

System.Windows.Controls.Checkbox Содержание: IsChecked: Ложные

Определение 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; } 
} 

Вот код, я использую, чтобы обновить ListView. 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); 
})); 

Что мне нужно изменить, чтобы получить флажок, который будет отображаться вместо XAML образуют Threadpool нить?

EDIT
Вот XAML код ListView

<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> 
+0

Есть ли какая-то конкретная причина использовать CheckBox вместо поля «bool»? – ShahidAzim

+0

Я хочу, чтобы пользователь мог изменить статус заметки/напоминания, установив флажок, чтобы пометить его как выполненный. – Wesley

+1

Вы смешиваете данные и представление с моим контролем в 'NotesRemindersViewDetails'. Также гораздо обычнее использовать класс, а не структуру. –

ответ

5

Вместо того, чтобы положить UI элемент (CheckBox) в данных для ListView, вы должны определить шаблон, так что вы можете оказать в качестве флажка, и просто используйте для данных данные Boolean. Использование в ваших данных CheckBox - это смешивание ваших пользовательских интерфейсов и слоев данных.

Update:

Вот пример (не проверено) о том, как сделать шаблон пользовательского столбца:

<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> 
+0

Как я могу сделать что-то подобное? Я все еще изучаю WPF и его возможности. Или если вы можете указать мне хороший учебник для шаблонов WPF. – Wesley

0

Вы должны использовать Ьоо поле для NoteReminderCompleted вместо CheckBox.