2011-10-24 34 views
1

我有一个列表框,自定义项目。代码:列表框项不会更新与绑定wp7

<ListBox Height="600" HorizontalAlignment="Left" Margin="7,6,0,0" Name="friendList" VerticalAlignment="Top" Width="449" ItemsSource="{Binding Friends}"> 
      <ListBox.ItemsPanel> 
       <ItemsPanelTemplate> 
        <toolkit:WrapPanel /> 
       </ItemsPanelTemplate> 
      </ListBox.ItemsPanel> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Grid Margin="5,0"> 
         <Image Height="120" HorizontalAlignment="Left" Name="image" Stretch="Fill" VerticalAlignment="Top" Width="120" Source="{Binding ImageUri}" GotFocus="image_GotFocus"/> 
         <CheckBox Height="78" HorizontalAlignment="Left" Margin="65,63,0,0" x:Name="selectedChckbox" VerticalAlignment="Top" Width="55" IsChecked="{Binding Selected, Mode=TwoWay}"/> 
         <TextBlock Height="58" HorizontalAlignment="Left" Margin="0,122,0,0" x:Name="nameTextBlck" VerticalAlignment="Top" Text ="{Binding Title}" Width="120" TextWrapping="Wrap" GotFocus="name_GotFocus"/> 
        </Grid> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

我已经创建了值的veiwmodel绑定,当我点击一个项目我想改变复选框状态,像这样:

friendSelectionViewModel.Friends[_selectFriendContent.friendList.SelectedIndex].Selected = !friendSelectionViewModel.Friends[_selectFriendContent.friendList.SelectedIndex].Selected; 

视图模型代码:

public class FacebookFriendSelectionViewModel : INotifyPropertyChanged 
{ 
    public FacebookFriendSelectionViewModel() 
    { 
     Friends = new ObservableCollection<TempFriends>(); 
    } 
     /// <summary> 
    /// A collection for MenuItemViewModel objects. 
    /// </summary> 
    public ObservableCollection<TempFriends> Friends { get; private set; } 

    public void AddItem(TempFriends item) 
    { 
     Friends.Add(item); 
    } 
    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged(string propertyName) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (null != handler) 
     { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

} 公共类TempFriends { 布尔_selected;

public string Title { get; set; } 

public string ImageUri { get; set; } 

public bool Selected { 
    get 
    { 
     return _selected; 
    } 
    set 
    { 
     _selected = value; 
     OnPropertyChanged("Selected"); 
    } 
} 

public string Id { get; set; } 


public TempFriends(string title, string imageUir, bool selected, string id) 
{ 
    Title = title; 
    ImageUri = imageUir; 
    _selected = Selected = selected; 
    Id = id; 
} 

public event PropertyChangedEventHandler PropertyChanged; 

private void OnPropertyChanged(String info) 
{ 
    if (PropertyChanged != null) 
    { 
     PropertyChanged(this, new PropertyChangedEventArgs(info)); 
    } 
} 

但唯一的方式获取列表框中的值更新,如果我设置在DataContext为null,比分配视图模型aggain像这样:

_selectFriendContent.DataContext = null; 
    _selectFriendContent.DataContext = friendSelectionViewModel; 

但是,这需要大约5-10秒,刷新列表。我知道有一个更好的解决方案,我只是不知道如何。

在此先感谢!据我所知,

+0

您的“选定”属性在setter上增加OnPropertyChanged(“Selected”)? – Nagg

回答

3

TempFriends类没有执行INotifyPropertyChanged。只需添加公共类TempFriends:INotifyPropertyChanged

+0

是的,就是这样。谢谢 :) –