2016-04-28 1 views
0

Я чрезвычайно новичок в разработке WP8 в C#. Я пытаюсь написать простое приложение, которое будет извлекать данные с веб-страницы, а затем обновлять TextBlock непрерывно, возможно, каждую секунду.Как получить данные с веб-страницы и показать ее в xaml непрерывно в Windows Phone 8?

В настоящее время я могу получить данные с веб-страницы, но не могу обновить TextBlock, хотя я использовал INotifyPropertyChanged. TextBlock обновляется только один раз, когда приложение запускается.

CS-файл MachineData:

public class MachineData : INotifyPropertyChanged 
{ 
    public string CurrentValue 
    { 
     get 
     { 
      return _currentValue; 
     } 
     set 
     { 
      _currentValue = value; 
      NotifyPropertyChanged("CurrentValue"); 
     } 
    } 
    private string _currentValue; 

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

Вот код, который я использовал для извлечения данных:

foreach (MachineData md in Items) 
{ 
    var wc = new WebClient(); 
    wc.DownloadStringCompleted += (sender, e) => 
    { 
     string data = (string)e.Result; 
     md.CurrentValue = data; // Update the value of machine 
     wc.DownloadStringAsync(new Uri(address)); 
    }; 
    wc.DownloadStringAsync(new Uri(address)); 
} 

В XAML фрагмент кода:

<DataTemplate> 
    <StackPanel Margin="0,0,0,17"> 
     <TextBlock Text="{Binding CurrentValue}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/> 
    </StackPanel> 
</DataTemplate> 
+0

U, возможно, потребуется запустить этот файл md.CurrentValue =; // Обновление значения машины в потоке пользовательского интерфейса –

ответ

0

Я предполагаю, вы используете какой-то список вроде управления, например ListBox, GridView и т. д.

Что вам нужно сделать, это привязать ваш Items к ItemSource к управлению, после чего вы получите обновление.

В настоящее время я не вижу, как вы привязываете MachineData к элементу управления, так что, возможно, это моя первая догадка, почему он не работает для вас.

Вот какой рабочий код.

XAML:

<Grid Background="White"> 
    <ListBox x:Name="MyListBox"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
      <StackPanel Margin="0,0,0,17"> 
       <TextBlock Text="{Binding CurrentValue}" TextWrapping="Wrap"/> 
       <Button Click="Button_Click">click</Button> 
      </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</Grid> 

код позади:

public sealed partial class MainPage : Page 
{ 
    List<MachineData> Items = new List<MachineData>(); 

    public MainPage() 
    { 
     this.InitializeComponent(); 
     if (System.Diagnostics.Debugger.IsAttached) 
     { 
      Application.Current.DebugSettings.EnableFrameRateCounter = false; 
     } 

     Items.Add(new MachineData()); 

     MyListBox.ItemsSource = Items; 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     foreach (MachineData md in Items) 
     { 
      md.CurrentValue = "Update Text"; 
     } 
    } 
} 

Здесь, при нажатии кнопки MachineData устанавливается "Обновить текст", и вы должны увидеть текст обновления.