2015-04-22 1 views
1

У меня возникла проблема с longlistselector в приложении Windows Phone 8. После выбора и редактирования записи из longlistselector и отправки изменений в мою локальную базу данных longlistselector не отображает обновленное имя, если вы не закрываете и не открываете приложение повторно. Данные, безусловно, обновляются, его просто не показывают. Есть ли способ выбрать список, пока приложение все еще открыто? Это Xaml для списка:Перезагрузка LongListSelector с обновленными данными из локальной базы данных - Windows Phone 8

<!--ContentPanel - place additional content here--> 
    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
     <phone:LongListSelector x:Name="llsModules" 
           Margin="0,0,-12,0" 
           ItemsSource="{Binding Modules}" 
           SelectionChanged="llsModules_SelectionChanged"> 
      <phone:LongListSelector.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Margin="0,0,0,17"> 
         <StackPanel Orientation="Horizontal"> 
          <Grid HorizontalAlignment="Stretch" Width="420" >        
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="*" /> 
            <ColumnDefinition Width="100"/> 
            <ColumnDefinition Width="100"/> 
           </Grid.ColumnDefinitions> 
          <TextBlock Text="{Binding Name,StringFormat='Name: {0}'}" 
           TextWrapping="Wrap" 
           MaxWidth="300" 
           Style="{StaticResource PhoneTextLargeStyle}" 
             HorizontalAlignment="Left" 
             Grid.Row="1" 
             /> 
          </Grid> 
         </StackPanel> 

И это код позади.

public ModulePage() 
    { 
     InitializeComponent();   
     DataContext = App.ViewModel; 
    } 

    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     App.ViewModel.LoadModulesData(); 
     llsModules.ItemsSource = App.ViewModel.Module;    
    } 

    private void llsModules_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (llsModules.SelectedItem == null) 
      return; 

     NavigationService.Navigate(new Uri("/ModuleDetails.xaml?moduleid=" + (llsModules.SelectedItem as Modules).Id, UriKind.Relative)); 

    } 

И это модель данных

[Table(Name = "Modules")] 
    public class Modules : INotifyPropertyChanged, INotifyPropertyChanging 
    { 
     public Modules() 
     { 
     } 

     private int _id; 
     [Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)] 
     public int Id 
     { 
      get 
      { 
       return _id; 
      } 
      set 
      { 
       if (_id != value) 
       { 
        NotifyPropertyChanging("Id"); 
        _id = value; 
        NotifyPropertyChanged("Id"); 
       } 
      } 
     } 

     private string _name; 
     [Column(DbType = "nvarchar(255)", CanBeNull = false)] 
     public string Name 
     { 
      get 
      { 
       return _name; 
      } 
      set 
      { 
       if (value == "") 
        throw new Exception("Module Name is a required field"); 

       if (_name != value) 
       { 
        NotifyPropertyChanging("Name"); 
        _name = value; 
        NotifyPropertyChanged("Name"); 
       } 
      } 
     } 

спасибо!

ответ

0

В Xaml смените привязку, которая используется для отображения имени на TwoWay.

Text="{Binding Name, Mode=TwoWay, StringFormat='Name: {0}'}" 

Это позволяет XAML знать, чтобы следить за InotifyPropertyChanges на Name собственности.