Xaml 将视图模型绑定到组合框
我正在制作一个UWP应用程序,我已经将一个Xaml 将视图模型绑定到组合框,xaml,data-binding,combobox,uwp,Xaml,Data Binding,Combobox,Uwp,我正在制作一个UWP应用程序,我已经将一个可观察的集合绑定到一个组合框。我可以看到组合框中填充的项目。但是我还需要设置它的SelectedItem属性,我无法使用它 XAML: User是名为UserViewModel的类的对象,该类具有EduRoleViewModeltype属性该类如下: class UserViewModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyCha
可观察的集合
绑定到一个组合框
。我可以看到组合框中填充的项目。但是我还需要设置它的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
放在上面。你知道这是什么意思吗?@Edx: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));
}
}