使用MVVM-Light的Silverlight 4 Combobox和selectedValue

时间:2010-08-24 07:08:04

标签: combobox silverlight-4.0 mvvm-light

我最近开始使用MVVM-Light工具包而且我遇到了以下问题:我有一个基本的Silverlight Combobox绑定到一个带有MyUser类型的ObservableCollection的viewmodel。 Combobox实现了一个自定义DataTemplate来组合用户的姓名和姓氏。加载用户列表后,如何设置Combobox以选择列表中的第一个用户并在折叠的Combobox中显示此选定用户?我知道有人建议使用SelectedValue属性,但我无法使用SelectedItem或SelectedValue使其工作。换句话说,即使我在加载了用户列表后设置了SelectedValue / SelectedItem,所选的MyUser也不会在组合框中显示为已选中,我该如何实现?请参阅下面的XAML:

<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");
    }
}

1 个答案:

答案 0 :(得分:0)

答案很简单,您必须在viewModel中设置Selected User之前为List of MyUsers引发PropertyChanged事件,即在更新SelectedValue之前通知UI ItemsSource已更改。