Wpf组合框选择的项目不起作用

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)

如果我尝试创建新用户并从组合框中选择一个角色,则会将其正确绑定到用户.问题是,当我加载已经存在的用户时,角色不会显示在组合框中(即使用户已定义角色).

有什么帮助吗?

提前致谢

Nit*_*tin 6

这是因为引用RoleDTOUserDTO已经不符合任何RoleDTOsRoles您设置为收集ItemsSourceComboBox.

最好在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)