【发布时间】:2020-08-14 13:04:53
【问题描述】:
我有这个 XAML
<DataGrid ItemsSource="{Binding Users}"
CanUserAddRows="False"
SelectedItem="{Binding SelectedUser}"
AutoGenerateColumns="False"
Grid.Column="0">
<DataGrid.Columns>
<DataGridTextColumn Header="First name" Binding ="{Binding FirstName}"/>
<DataGridTextColumn Header="Last name" Binding ="{Binding LastName}"/>
<DataGridComboBoxColumn Width="*" Header="Catégorie"
SelectedItemBinding="{Binding Role}">
<DataGridComboBoxColumn.ElementStyle>
<Style>
<Setter Property="ComboBox.ItemsSource"
Value="{Binding Path=DataContext.ComboBox_Roles,
RelativeSource={RelativeSource
FindAncestor, AncestorType={x:Type UserControl}}}" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style>
<Setter Property="ComboBox.ItemsSource" Value="{Binding
Path=DataContext.ComboBox_Roles, RelativeSource={RelativeSource
FindAncestor, AncestorType={x:Type UserControl}}}" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
我希望组合框绑定到我的角色集合
我的模型
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Role { get; set; }
}
在我的视图模型中:
public ManageUsersViewModel()
{
_users = new ObservableCollection<User>
{
new User { FirstName = "First1", LastName = "Last1", Role = "Admin" },
new User { FirstName = "Last2", LastName = "Last2", Role ="User" },
};
ComboBox_Roles = new ObservableCollection<string> { "ABC", "BCD", "ASDSAD" };
}
public ObservableCollection<User> Users
{
get => _users;
set
{
_users = value;
}
}
public ObservableCollection<string> ComboBox_Roles { get; set; }
如何绑定这些物品?似乎问题是我不能以这种方式绑定到集合中的集合。我想要实现的是我有一个带有角色列表的组合框,我可以通过选择组合框的值之一来更改我的用户角色。更新:更新代码,因为我意识到我在做。
【问题讨论】:
-
您能否更详细地说明您的目标?您希望显示列表中提供的所有值吗?
-
这能回答你的问题吗? Binding DataGridComboBoxColumn
-
@Drreamer 我有用户列表,每个用户都有自己的角色集合(字符串)。我想使用组合框显示这些角色
-
@PavelAnikhouski 似乎不是,我已经尝试过了,但对我没有帮助
-
ComboBox 并不意味着显示值列表。它允许显示/选择列表中的一项。如果您希望一次显示多个值,那么最好使用一个简单的文本列并定义一个转换器以将所有值合并到一个字符串中。例如。如此处所示stackoverflow.com/a/345515/12797700