2014-10-24 2 views
0

У меня есть класс, где я загружаю текстовый файл с данными. Данные разбиты на одну строку, поэтому я разделяю эту строку, но это в списке. Таймер Загрузки этих данных (списка). В моей основной статье я хочу обновить все привязки, которые используют некоторые значения индекса List. Что было бы лучше всего.ObservableCollection в загруженном списке C#

class ClientRawDataList 
{ 
    public static void Interval() 
    { 
     DispatcherTimer _timer; 
     _timer = new DispatcherTimer(); 
     _timer.Tick += _timer_Tick; 
     _timer.Interval = TimeSpan.FromSeconds(4); 
     _timer.Start(); 
    } 

    public static void _timer_Tick(object sender, object e) 
    { 
     DownloadClientRaw(); 
    } 

    public static async Task<ObservableCollection<string>> DownloadClientRaw() 
    { 
     ObservableCollection<string> clientrawList = null; 
     string Station = (string)Windows.Storage.ApplicationData.Current.LocalSettings.Values["UrlSetting"]; 
     string Cache = "?nocache=" + DateTime.UtcNow.ToString(); 
     Windows.Storage.StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder; 
     { 
       string ClientrawFile = "clientraw.txt"; 

       Uri ClientRaw = new Uri(Station + ClientrawFile + Cache, UriKind.Absolute); 
       var httpClient = new HttpClient(); 

       try 
       { 
        var resultRaw = await httpClient.GetStringAsync(ClientRaw); 
        clientrawList = new ObservableCollection<string>(resultRaw.Split(' ')); 
       } 
       catch (Exception ex) 
       { 
        Debug.WriteLine(ex.Message); 
       } 

       httpClient.Dispose(); 
       return clientrawList; 
     }    
    } 
}   
} 

Пробовал разный подход

public sealed partial class MainPage : Page 
{ 
    public DispatcherTimer _timer; 

    public MainPage() 
    { 
     this.InitializeComponent(); 
     var Setting = Windows.Storage.ApplicationData.Current.LocalSettings; 
     Setting.Values["UrlSetting"] = "http://www.flugsportverein-reutte.at/modules/Wetter/"; 
     //Setting.Values["UrlSetting"] = "http://www.lyndhurst-hill.info/"; 
     //Interval(); 
     GetClientraw(); 
     this.NavigationCacheMode = NavigationCacheMode.Required; 
    } 

    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
    } 

    private void Interval() 
    { 
     _timer = new DispatcherTimer(); 
     _timer.Tick += _timer_Tick; 
     _timer.Interval = TimeSpan.FromSeconds(5); 
     _timer.Start(); 
    } 

    void _timer_Tick(object sender, object e) 
    { 
     GetClientraw(); 
    } 

    public async Task<ObservableCollection<string>> GetClientraw() 
    { 
     ClientrawList clientrawList = new ClientrawList(); 

     string Station = (string)Windows.Storage.ApplicationData.Current.LocalSettings.Values["UrlSetting"]; 
     string Cache = "?nocache=" + DateTime.UtcNow.ToString(); 
     { 
      string ClientrawFile = "clientraw.txt"; 
      Uri ClientRaw = new Uri(Station + ClientrawFile + Cache, UriKind.Absolute); 

      var httpClient = new HttpClient(); 
      try 
      { 
      var resultRaw = await httpClient.GetStringAsync(ClientRaw); 
      clientrawList.ClientrawData = new ObservableCollection<string>(resultRaw.Split(' ')); 

      if (resultRaw == "") 
      { 
       var messageDialog = new MessageDialog("No main data available"); 
       await messageDialog.ShowAsync(); 
      } 
      } 
      catch (Exception ex) 
      { 
       Debug.WriteLine(ex.Message); 
      } 
      httpClient.Dispose(); 
      return clientrawList.ClientrawData; 
     } 
    } 
    } 
} 

класса ClientrawList

public class ClientrawList : INotifyPropertyChanged 
{ 
    private ObservableCollection<string> _clientrawData; 
    public ObservableCollection<string> ClientrawData 
    { 
     get 
     { 
      return _clientrawData; 
     } 
     set 
     { 
      if (_clientrawData != null) 
      { 
       _clientrawData.CollectionChanged -= _clientrawData_CollectionChanged; 
      } 
      _clientrawData = value; 

      if(_clientrawData != null) 
      { 
       _clientrawData.CollectionChanged += _clientrawData_CollectionChanged; 
      } 

      onPropertyChanged("ClientrawData"); 
     } 
    } 

    private void _clientrawData_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) 
    { 
     onPropertyChanged("ClientrawData"); 
    } 

    public ClientrawList() 
    { 

    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    protected void onPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    }  
} 
} 

XAML

<Page 
x:Class="Download.MainPage" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="using:Download" 

xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d" 
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
<Page.DataContext> 
    <local:ClientrawList /> 
</Page.DataContext> 
<Grid> 
    <GridView> 
     <StackPanel> 
      <TextBlock x:Name="txt" Text="{Binding ClientrawData}" Height="224" FontSize="36"/> 
     </StackPanel> 
    </GridView> 

</Grid> 
</Page> 

Забавная часть здесь является то, что, когда я поставил точку останова на OnPropertyChanged, я могут видеть данные о часть XAML, но не будет отображаться на экране (см. рисунок).

Невозможно добавить изображение, но вот ссылка XAML break

ответ

0

Если вы используете WPF вы можете связать наблюдаемую коллекцию сказать GridView или другой элемент управления.

+0

Я пробовал свой путь, но все еще не видел. – user2925246

Смежные вопросы