2010-08-24 121 views
0

我最近開始使用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"); 
    } 
} 

回答

0

答案很簡單,你必須設置所選用戶之前籌集MyUsers的列表PropertyChanged事件在viewModel中,即在更新SelectedValue之前通知UI ItemsSource已經改變。

相關問題