我最近开始使用MVVM-Light工具箱,并且遇到以下问题:我有一个基本的Silverlight组合框,它绑定到具有MyUser类型的ObservableCollection的viewmodel。 Combobox实现了一个自定义的DataTemplate来组合用户的姓名。加载用户列表后,如何设置Combobox来选择列表中的第一个用户,并在折叠的Combobox中显示这个选定的用户?我知道已经建议使用SelectedValue属性,但我无法使用SelectedItem或SelectedValue来使其工作。换句话说,即使我在加载用户列表后设置了SelectedValue/SelectedItem,选择的MyUser不会在组合框中显示为选中状态,但我该如何实现呢?请参阅下面的XAML:Silverlight 4 Combobox与使用MVVM-Light的selectedValue
<ComboBox
ItemsSource="{Binding MyUsers, Mode=OneWay}"
SelectedItem="{Binding SelectedUser, Mode=TwoWay}"
IsEnabled="{Binding IsReady}">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"></TextBlock>
<TextBlock Text=" "></TextBlock>
<TextBlock Text="{Binding Surname}"></TextBlock>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
视图模型代码如下:
public ObservableCollection<MyUser> MyUsers
{
get
{
return myUsers;
}
set
{
if (myUsers == value)
{
return;
}
myUsers = value;
SelectedUser = myUsers.FirstOrDefault();
IsReady = true;
RaisePropertyChanged("MyUsers");
}
}
public MyUser SelectedUser
{
get
{
return selectedUser;
}
set
{
if (selectedUser == value)
{
return;
}
selectedUser = value;
RaisePropertyChanged("SelectedUser");
}
}