Keo*_*oki 3 wpf combobox selecteditem
我有两个对象:UserDto和RoleDto.用户拥有RoleDto属性.在我的viewmodel中,我有以下内容:
public UserDto User
{
get { return _user; }
set
{
if (_user == value) return;
_user = value;
User.PropertyChanged += UserPropertyChanged;
OnPropertyChanged("User");
}
}
private UserDto _user;
public IEnumerable<RoleDto> Roles { get; set; } //I load all available roles in here
Run Code Online (Sandbox Code Playgroud)
在视图中,我想选择用户所属的角色.这是我在视图中定义组合框的方式:
<ComboBox Grid.Row="3" Grid.Column="1" Margin="5" ItemsSource="{Binding Roles}" SelectedItem="{Binding User.Role, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="Description" />
Run Code Online (Sandbox Code Playgroud)
如果我尝试创建新用户并从组合框中选择一个角色,则会将其正确绑定到用户.问题是,当我加载已经存在的用户时,角色不会显示在组合框中(即使用户已定义角色).
有什么帮助吗?
提前致谢
这是因为引用RoleDTO您UserDTO已经不符合任何RoleDTOs 在 Roles您设置为收集ItemsSource的ComboBox.
最好在ViewModel上定义一个属性
public RoleDTO SelectedRole
{
get { return Roles.FirstOrDefault(role => role.Role == User.RoleDto.Role); }
set { User.RoleDto = value; OnPropertyChanged("SelectedRole"); }
}
Run Code Online (Sandbox Code Playgroud)
并将其设置为组合框的SelectedItem
ItemsSource="{Binding Roles}" SelectedItem="{Binding SelectedRole, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="Description" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9246 次 |
| 最近记录: |