2016-04-20 4 views
0

Eine meiner KlassenWie ein CheckedListItem WPF

public class CheckedListItem<T> : INotifyPropertyChanged 
aktualisieren

die Methode

public bool IsChecked 
    { 
     get { return isChecked; } 
     set 
     { 
      isChecked = value; 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs("IsChecked")); 
      } 
     } 
    } 

Meine XAML sieht aus wie

<ListBox ItemsSource="{Binding Employee}" > 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <CheckBox IsChecked="{Binding IsChecked}" Content="{Binding Path=Item.Name}" /> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

Meine Employee.cs Datei

hat
public class Employee 
{ 
    public string Name { get; set; } 
} 

Ich kann nicht herausfinden, wie ich zurück in die Datenbank schreiben kann, wenn ein Element aktiviert oder deaktiviert ist.

Ich würde jede Hilfe zu schätzen wissen und würde mehr als glücklich sein, den gesamten Code für alle Dateien zu veröffentlichen, die Sie sehen müssen.

Antwort

1

Sie sollten in der Lage sein zu bekommen, was Sie wollen, indem Sie TwoWay für den Modus und PropertyChanged auf UpdateSourceTrigger hinzufügen.

Finale XAML ist dann:

<ListBox ItemsSource="{Binding Employee}" > 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Content="{Binding Path=Item.Name}" /> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

EDIT: By the way, ich glaube, Sie könnten Ihre Itemssource falsch sein Einstellung. Ich bin mir sicher, dass Sie diese Listbox an eine Sammlung von Mitarbeitern binden möchten.

Etwas wie:

public ObservableCollection<Employee> Employees 
    { 
     get { return _employees; } 
     set 
     { 
      _employees = value; 
      if (PropertyChanged != null) 
       { 
       PropertyChanged(this, new PropertyChangedEventArgs("Employees")); 
      } 
     } 
    } 

ich die Frage falsch verstanden, so kommt hier zweite edit:

Ihre Klassendateien stattdessen würde wie folgt aussehen:

public partial class MainWindow : INotifyPropertyChanged 
{ 
    private ObservableCollection<MutableKeyValuePair<Employee, bool>> _employees; 

    public MainWindow() 
    { 
     InitializeComponent(); 

     Employees = new ObservableCollection<MutableKeyValuePair<Employee, bool>> 
     { 
      new MutableKeyValuePair<Employee, bool>(new Employee("Joakim"), false), 
      new MutableKeyValuePair<Employee, bool>(new Employee("SoftwareIsFun"), false), 
     }; 
    } 

    public ObservableCollection<MutableKeyValuePair<Employee, bool>> Employees 
    { 
     get { return _employees; } 
     set 
     { 
      _employees = value; 
      OnPropertyChanged(nameof(Employees)); 
     } 
    } 

    public void UpdateDatabase() 
    { 
     foreach (var employee in Employees) 
     { 
      if (employee.Value) 
      { 
       //DATABASE LOGIC HERE 
      } 
     } 
    } 
} 

public class MutableKeyValuePair<TKey, TValue> 
{ 
    public TKey Key { get; set; } 
    public TValue Value { get; set; } 

    public MutableKeyValuePair() 
    { 

    } 

    public MutableKeyValuePair(TKey key, TValue value) 
    { 
     Key = key; 
     Value = value; 
    } 
} 

public class Employee 
{ 

    public Employee(string name) 
    { 
     Name = name; 
    } 
    public string Name { get; set; } 
} 

XAML:

<DataGrid ItemsSource="{Binding Employees}" AutoGenerateColumns="False"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding Key.Name}"/> 
      <DataGridCheckBoxColumn Binding="{Binding Value}"/> 
     </DataGrid.Columns> 
    </DataGrid> 

enter image description here

+0

Danke. Wie aktualisiert der TwoWay den Datenbankeintrag? Ich habe Code in meiner Code-Behind-Datei, die eine SQL-Abfrage ausführt und das Kontrollkästchen aktiviert, wenn das Feld in der Tabelle 1 ist (oder deaktiviert, wenn das Feld 0 ist). Basierend auf Ihrer Antwort, es scheint, ich habe etwas falsch gemacht –

+0

@softwareisfun Sorry Kumpel, ich missverstanden Ihre Frage. Ich dachte, Sie hätten Probleme beim Aktualisieren der IsChecked-Eigenschaft. Ich werde meine Antwort mit einem Ansatz aktualisieren, den Sie verwenden könnten! –

+0

@softwareisfun Bitte lassen Sie mich wissen, wenn meine letzte Bearbeitung Ihnen hilft, was Sie suchen, indem Sie es als Antwort markieren :) –

Verwandte Themen