私のXAMLには、親要素を選択するComboBoxがあります。 ComboBoxでアイテムを選択すると、ComboBoxから選択された親に属する子エレメントがDataGridに挿入されます(これは意味があると思います)。ComboBoxを使用してDataGridのデータを選択する
私はこれを行うには、データバインディングと私のViewModelを使用したいと考えていましたが、私は正直なところ、私は次のように設定した私のViewModelに選択された連絡先グループIDを渡すためにどのよう見当がつかない<!-- 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>
:
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);
}
}
ComboBoxでListContactsForGroupCommand
を実行するにはどうすればよいですか?
私はそれをSelectionChanged
イベントにフックできると考えましたが、今はパラメータ値を提供する方法を見ています。
コードビハインドからこれを行うことはできますか?
ContactGroupsViewModelのコードは役に立ちます –
コンボボックスで別のアイテムが選択されたときに 'ContactGroup'セッターが呼び出されます。コマンドやイベントは必要ありません。唯一の注意点は、コードの背後からsetterを呼び出さないことです(初期値の設定時など)。これは別のプロパティを持つことができます(または、プロパティのバインドを更新するためのフィールドと上昇通知を設定するだけです)。 – Sinatr
@RomanoZumbéどのようにすれば正確に役立ちますか?難しいことではありませんが、私が提供したコードから、私が使用しようとしているIdとNameプロパティが含まれていることは明らかです。私はそのコードをどうやって私が試みていることを達成するのを助けるのか理解できません。あなたは説明できますか? – Ortund