Silverlight 4 Combobox с выбранным значением с использованием MVVM-Light - PullRequest
0 голосов
/ 24 августа 2010

Я недавно начал использовать инструментарий MVVM-Light и застрял в следующей проблеме: у меня есть базовый комбинированный блок Silverlight, который привязан к модели представления с набором ObservableCollection типа MyUser. В 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 голосов
/ 24 августа 2010

Ответ прост: вы должны вызвать событие PropertyChanged для списка MyUsers перед установкой Selected User в viewModel, то есть уведомить пользовательский интерфейс об изменении ItemSource перед обновлением SelectedValue.

...