Ich bin noch neu in WPF und Binding also bitte so genau wie möglich sein. Ich versuche, eine Liste von Objekten zu einer ListBox von CheckBoxen zu erstellen, die ich mit einer Combobox binden möchte. Wenn das Kombinationsfeld ausgewählt ist, möchte ich die ListBox der CheckBoxes aktualisiert werden. Die ListBox lädt beim ersten Laden einwandfrei, aktualisiert sich jedoch nicht, wenn sich die Liste der Objekte ändert. Ich habe debugged, und ich kann sehen, dass die Objekte es ändern, nur die Benutzeroberfläche wird nicht ausgelöst. Jede Hilfe wäre nett, danke im Voraus der Zeit.WPF Checkliste Bindung mit ComboBox Wählen
ComboBox
<ComboBox Grid.Column="0" SelectionChanged="JobTypeComboBox_SelectionChanged"
Name="JobTypeComboBox"
ItemsSource="{Binding Path=AllJobTypes}"
DisplayMemberPath="Name"
SelectedValuePath="Name"
SelectedValue="{Binding Path=JobConfig.SelectedJobType.Name}" />
ListBox Ankreuzfelder
<ListBox ItemsSource="{Binding AllDocTypes}" Height="177" Name="listTopics" VerticalAlignment="Top">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<CheckBox Content="{Binding Name}" IsChecked="{Binding IsChecked}" Checked="DocTypeCheckBox_Checked" Unchecked="DocTypeCheckBox_UnChecked"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Constructor
public ConfigControl() {
InitializeComponent();
this.DataContext = this;
LoadSettings();
}
Attributes
// Create the OnPropertyChanged method to raise the event
protected void OnPropertyChanged(string name) {
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
public JobConfiguration JobConfig {
get { return _jobConfig; }
set {
_jobConfig = value;
// Call OnPropertyChanged whenever the property is updated
OnPropertyChanged("JobConfig");
}
}
public DocTypeList AllDocTypes {
get { return _allDocTypes; }
set {
_allDocTypes = value;
OnPropertyChanged("AllDocTypes");
}
}
ComboBox ändern auswählen
private void JobTypeComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) {
//set the new jobtype selected
//load settings for that job type
ComboBox cmb = sender as ComboBox;
JobType selectedJob = (JobType)cmb.SelectedItem;
JobConfig.SelectedJobType = selectedJob;
AllDocTypes.SetDocTypeIsChecked(JobConfig.SelectedJobType.DocTypes);
OnPropertyChanged("JobConfig");
OnPropertyChanged("AllDocTypes");
}
DocType Klassen
using System.Collections.Generic;
using System.Linq;
using System.Xml.Serialization;
namespace ISO_Validation_And_Processing.Models {
public class DocType {
[XmlElement]
public string Name { get; set; }
[XmlIgnore]
public bool IsChecked { get; set; } = false;
}
public class DocTypeList : List<DocType> {
public static DocTypeList Read(ISerializeManager serializeManager) {
if (serializeManager != null) {
return serializeManager.ReadObject<DocTypeList>();
} else {
return null;
}
}
public DocTypeList() { }
public void SetDocTypeIsChecked(DocTypeList selectedDocs) {
foreach (var docType in this) {
docType.IsChecked = IsDocTypeSelected(docType, selectedDocs);
}
}
public bool IsDocTypeSelected(DocType docType, DocTypeList selectedDocs) {
//if there is a doctype with the same name return true
return selectedDocs.Where(t => t.Name == docType.Name).ToList().Count > 0;
}
}
}
Wie und wo werden AllDocTypes "aktualisiert"? – mm8
Ist 'AllDocTypes' eine ObservableCollection <>? – MisterMystery
Sorry hinzugefügt den Konstruktor –