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>
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 –
@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! –
@softwareisfun Bitte lassen Sie mich wissen, wenn meine letzte Bearbeitung Ihnen hilft, was Sie suchen, indem Sie es als Antwort markieren :) –