2010-12-30 20 views
1

Ich aktualisiere eine Listbox über eine Datenbank und eine der Spalten, die ich einfügen möchte, ist ein Kontrollkästchen. Dieses Update wird von einem Threadpool verarbeitet und ich kann die Daten ohne Ausnahme für das Kontrollkästchen einfügen. Wenn ich das Kontrollkästchen erstelle, wird das xaml anstelle des Checkbox-Elements angezeigt. heißtC# Threadpool Erstellen von UI-Element

System.Windows.Controls.Checkbox Inhalt: IsChecked: False

Definition von 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; } 
} 

Hier ist der Code, den ich die Listenansicht zu aktualisieren verwende. NoteReminderType ist eine Struktur mit allen Notizen/Erinnerungsinformationen.

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); 
})); 

Was muss ich ändern, damit das Kontrollkästchen anstelle der XAML-Form des Threadpool-Threads angezeigt wird?

EDIT
Hier ist der XAML-Code für die Listenansicht

<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

Gibt es einen bestimmten Grund, CheckBox anstelle von "bool" Feld zu verwenden? – ShahidAzim

+0

Ich möchte, dass der Benutzer den Status der Notiz/Erinnerung ändern kann, indem er das Kontrollkästchen aktiviert, um es als abgeschlossen zu markieren. – Wesley

+1

Sie mischen Daten und Präsentation mit einem Steuerelement in 'NotesRemindersViewDetails'. Außerdem ist es viel üblicher, eine Klasse als eine Struktur zu verwenden. –

Antwort

5

Anstatt ein UI-Element (CheckBox) in den Daten für die ListView nehmen, sollten Sie eine Vorlage definieren, so dass Sie das machen können Spalte als Kontrollkästchen, und verwenden Sie einfach eine für die Daten. Wenn Sie in Ihren Daten ein CheckBox verwenden, mischen Sie Ihre UI- und Daten-Layer.

Update:

Hier ist ein Beispiel (nicht getestet), wie eine benutzerdefinierte Spalte Vorlage zu machen:

<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

Wie kann ich etwas so machen? Ich lerne immer noch WPF und seine Ins und Outs. Oder wenn Sie mich auf ein gutes Tutorial für WPF-Vorlagen hinweisen können. – Wesley

0

Sie müssen sich für NoteReminderCompleted Bool Feld verwenden, anstatt von CheckBox.