In meinem XAML habe ich eine ComboBox, die ein Elternelement auswählt. Die Auswahl eines Eintrags in der ComboBox sollte ein DataGrid mit untergeordneten Elementen füllen, die zu dem ausgewählten Elternteil von der ComboBox gehören (ich hoffe, das macht Sinn).Verwenden einer ComboBox zum Auswählen von Daten für ein DataGrid
<!-- Select here to populate datagrid -->
<ComboBox ItemsSource="{Binding ContactGroups}"
DisplayMemberPath="Name"
SelectedValuePath="Id"
SelectedValue="{Binding ContactGroup}" />
<!-- ComboBox selection loads data to the grid -->
<DataGrid ItemsSource={Binding Contacts}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding FirstName}" Header="First Name" />
<DataGridTextColumn Binding="{Binding LastName}" Header="Last Name" />
</DataGrid.Columns>
</DataGrid>
Ich wollte nur Datenbindung nutzen und mein Viewmodel, dies zu tun, aber ich habe ehrlich gesagt keine Ahnung, wie die ausgewählte Kontaktgruppe Id mein Viewmodel passieren, die ich habe mit dem folgenden ein:
public class ContactsViewModel
{
private readonly ObservableCollection<Contact> _Contacts
= new ObservableCollection<Contact>();
public IEnumerable<Contact> Contacts
{
get { return _Contacts; }
}
private ObservableCollection<ContactGroup> _ContactGroups
= new ObservableCollection<ContactGroup>();
private IEnumerable<ContactGroup> ContactGroups
{
get { return _ContactGroupsViewModel; }
}
// Binding for ContactGroups ComboBox
public ICommand ListContactGroupsCommand
{
get
{
return new MyDelegateCommand(ListContactGroups);
}
}
private void ListContactGroups()
{
using (ApplicationDbContext Context = new ApplicationDbContext())
{
var ContactGroups = Context.ContactGroups.Where
(
x => x.Deleted == false
);
foreach (var c in ContactGroups)
{
AddToContactGroups(c);
}
}
}
private void AddToContactGroups(ContactGroup group)
{
if (!_ContactGroups.Contains(group))
_ContactGroups.Add(group);
}
// Handle selection of a ContactGroup.
public ICommand ListContactsForGroupCommand
{
get
{
return new MyDelegateCommand((ContactGroupId) =>
{ ListContacts((int)ContactGroupId); });
}
}
private void ListContacts(int contactGroupId)
{
using (ApplicationDbContext db = new ApplicationDbContext())
{
var Contacts = db.Contacts.Where
(
x => x.ContactGroupId == contactGroupId &&
x.Deleted == false
);
foreach (var c in Contacts)
{
AddToContacts(c);
}
}
}
private void AddToContacts(Contact contact)
{
if (!_Contacts.Contains(contact))
_Contacts.Add(contact);
}
}
Wie kann ich meine ListContactsForGroupCommand
auf der ComboBox ausführen?
Ich dachte, ich kann es in das SelectionChanged
Ereignis haken, aber ich sehe jetzt Weg, um einen Parameterwert zur Verfügung zu stellen.
Kann ich dies aus dem Code-Behind tun?
Der Code von ContactGroupsViewModel würde helfen –
'ContactGroup' Setter wird aufgerufen, wenn ein anderes Element in der Combobox ausgewählt ist. Sie brauchen weder Befehl noch Ereignis. Die einzige Vorsichtsmaßnahme besteht darin, den Setter nicht aus dem Code heraus aufzurufen (z. B. beim Setzen des Anfangswerts), dafür können Sie eine andere Eigenschaft haben (oder einfach die Feld- und Anstiegsbenachrichtigung für die Eigenschaft zum Aktualisieren von Bindungen setzen). – Sinatr
@ RomanoZumbé in welcher Weise würde es genau helfen? Ich möchte nicht schwierig sein, aber von dem Code, den ich zur Verfügung gestellt habe, ist es offensichtlich, dass er eine Id- und Name-Eigenschaft enthält, die ich zu verwenden versuche. Ich verstehe nicht, wie dir der Code hilft, mir zu helfen, das zu erreichen, was ich versuche. Könntest du erklären? – Ortund