Xaml 将视图模型绑定到组合框

Xaml 将视图模型绑定到组合框,xaml,data-binding,combobox,uwp,Xaml,Data Binding,Combobox,Uwp,我正在制作一个UWP应用程序,我已经将一个可观察的集合绑定到一个组合框。我可以看到组合框中填充的项目。但是我还需要设置它的SelectedItem属性,我无法使用它 XAML: User是名为UserViewModel的类的对象,该类具有EduRoleViewModeltype属性该类如下: class UserViewModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyCha

我正在制作一个UWP应用程序,我已经将一个
可观察的集合
绑定到一个
组合框
。我可以看到
组合框中填充的项目。但是我还需要设置它的
SelectedItem
属性,我无法使用它

XAML:

User是名为UserViewModel的类的对象,该类具有
EduRoleViewModel
type属性该类如下:

class UserViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    private EduRoleViewModel _eduRole;
    public EduRoleViewModel EduRole
    {
        get { return _eduRole; }
        set
        {
            _eduRole = value;
            this.OnPropertyChanged();
        }
    }

    public void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {            
        this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

我希望
UserViewModel
EduRole
属性的
Read
属性成为
组合框的
SelectedItem

是否
EduRoleList
是类的属性?哪一个?无论
edrolelist
属于哪个类,我们都将其称为
SecretViewModelX
。如果绑定起作用并填充组合框,
SecretViewModelX
是组合框的数据上下文。您的
SelectedItem
绑定假定
SecretViewModelX
有一个名为
User
的属性,whcih有一个名为
EduRole
的属性,该属性名为
Read
SelectedItem=“{x:Bind Path=User.EduRole.Read,Mode=OneWay}”
。所以
User
应该是
UserViewModel
。我无法想象你为什么要把
Mode=one-way
放在上面。你知道这是什么意思吗?@Ed
x:Bind
的默认模式是
OneTime
@Clemens啊,谢谢。当itemsource绑定到EduRoleViewModel集合时,SelectedItem也应该是EduRoleViewModel。因此绑定可能应该是
{x:Bind Path=User.EduRole}
。您可能还必须确保所选项实际上是源集合的成员(取决于实现相等比较的方式)。
  private ObservableCollection<EduRoleViewModel> EduRoleList { get; set; } = new ObservableCollection<EduRoleViewModel>();
public class EduRoleViewModel
{
    public string Key { get; set; }
    public string Read { get; set; }
}
class UserViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    private EduRoleViewModel _eduRole;
    public EduRoleViewModel EduRole
    {
        get { return _eduRole; }
        set
        {
            _eduRole = value;
            this.OnPropertyChanged();
        }
    }

    public void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {            
        this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}