我希望jobrole和jobtitle成为comboxes和button。 因为它是使用itemsource绑定生成的,而列表是在c#中生成的。 我找不到一种方法可以说出该列名是否是Jobrole然后制作一个组合框或其他一些我不知道的方法。
如果可能的话,如何使列只能读取。
<Grid>
<DataGrid ItemsSource="{Binding ContactList}" SelectedItem="{Binding SelectedContact}"/>
</Grid>
如果你需要它,这就是我的数据网格组成的地方。
public static ObservableCollection<ContactPerson> getContactPerson()
{
ObservableCollection<ContactPerson> contactPersons = new ObservableCollection<ContactPerson>();
try
{
doc.Load("Database/contactpersoon.xml");
}
catch (Exception e)
{
throw;
}
XmlNodeList elemList = doc.GetElementsByTagName("contact");
for (int i = 0; i < elemList.Count; i++)
{
ContactPerson contactPerson = new ContactPerson();
contactPerson.ID = i.ToString();
contactPerson.Name = elemList[i]["name"].InnerText;
contactPerson.Company = elemList[i]["company"].InnerText;
contactPerson.City = elemList[i]["city"].InnerText;
contactPerson.Email = elemList[i]["email"].InnerText;
contactPerson.Phone = elemList[i]["phone"].InnerText;
contactPerson.Cellphone = elemList[i]["cellphone"].InnerText;
contactPerson.JobRole = new ContactPersonType
{
ID = i.ToString(),
Name = elemList[i]["jobrole"].InnerText
};
contactPerson.JobTitle = new ContactPersonTitle
{
ID = i.ToString(),
Name = elemList[i]["title"].InnerText
};
ContactPersonTitle.invullenContactPersonTitle(i.ToString(), contactPerson.JobTitle.Name);
contactPersons.Add(contactPerson);
}
return contactPersons;
}
public override string ToString()
{
return ID + " " + Name + " " + Company + " " + JobRole +" " + JobTitle + " " + City +" " + Email + " " + Phone + " " + Cellphone;
}
感谢
答案 0 :(得分:0)
您可以使用DataGridComboBoxColumn
。像这样:
<DataGrid.Columns>
<DataGridComboBoxColumn Header="Job Title"
DisplayMemberPath="JobTitle.Name"
ItemsSource="{x:Static ContactPersonTitle.AvailableJobTitles}"
SelectedItemBinding="{Binding JobTitle}"/>
</DataGrid.Columns>
但这意味着您需要为数据网格设置AutoGenerateColumns="False"
,以便不生成此列。而这反过来意味着您需要设置所有其他列。
我在ContactPersonTitle
对象上假设了一个静态属性(带有更改通知),因为那里已有静态方法。如果要使用视图模型中的列表,它应如下所示:
<DataGrid.Columns>
<DataGridComboBoxColumn Header="Job Title"
DisplayMemberPath="JobTitle.Name"
ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type UserControl}},
Path=DataContext.AvailableJobTitlesInViewModel}"
SelectedItemBinding="{Binding JobTitle}"/>
</DataGrid.Columns>
如果您需要更精确地控制数据的显示方式,可以使用DataGridTemplateColumn
来设置CellTemplate
和CellEditingTemplate
- 您可以自定义的数据模板您的需求。这些数据模板的数据上下文是行的项目,即您的案例中的ContactPerson
。