2012-01-17 9 views
0

async WebRequestを使用して2分ごとに更新するxmlからデータを取得しています。だから私はそれに応じて変更するリストボックスを変更するデータが必要です。私はインターネットからデータを引き出し、コードの最後の行はこれらです。バインドされたプロパティが変更されたときにBinding値でリストボックスを更新する

IEnumerable<Update> list = from y in xelement.Descendants("Song") 
        select new Update() 
        { 
         NowTitle = y.Attribute("title").Value, 
         NowArtist = y.Element("Artist").Attribute("name").Value 
        }; 
        Dispatcher.BeginInvoke(()=> nowList.ItemsSource = list); 

XAMLはこのように見えます。

 <ListBox x:Name="nowList" Height="86" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <StackPanel Margin="0,0,0,0" Orientation="Vertical" Background="Gray" HorizontalAlignment="Stretch"> 
          <TextBlock Height="Auto" Width="480" Text="{Binding Path=NowTitle, Mode=OneWay}" TextWrapping="Wrap" TextAlignment="Center" FontSize="24" FontWeight="Bold" Foreground="#FFE5D623" HorizontalAlignment="Stretch" /> 
          <TextBlock Height="Auto" Width="480" Text="{Binding Path=NowArtist, Mode=OneWay}" TextWrapping="Wrap" TextAlignment="Center" FontSize="24" FontWeight="Bold" Foreground="#FFE5D623" HorizontalAlignment="Stretch" /> 
         </StackPanel> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 

プロパティを含むクラスの更新はこれです。

public class Update : INotifyPropertyChanged 
{ 

    string nowTitle; 
    string nowArtist; 
    public string NowTitle 
    { 
     get 
     { 
      if (!string.IsNullOrEmpty(nowTitle)) 
      { 
       return "Τώρα : " + nowTitle; 
      } 
      else 
      { 
       return "something"; 
      } 
     } 
     set { this.nowTitle = value; 
     NotifyPropertyChanged("NowTitle"); 
     } 
    } 
    public string NowArtist 
    { 
     get 
     { 
      if (!string.IsNullOrEmpty(nowTitle)) 
      { 
       return "by " + nowArtist; 
      } 
      else 
      { 
       return ""; 
      } 
     } 
     set { this.nowArtist = value; 
     NotifyPropertyChanged("NowArtist"); 
     } 
    } 


    #region INotifyPropertyChanged Members 
    public event PropertyChangedEventHandler PropertyChanged; 
    public void NotifyPropertyChanged(String propertyName) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (null != handler) 
     { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
    #endregion 

} 

私は間違っていると誰に教えてくれますか?ありがとう!

+0

はあなたがあなたの問題を解決することを比較的確信していますXMLが更新されるたびに 'Dispatcher.BeginInvoke(()=> nowList.ItemsSource = list);部分を呼び出します。 –

+0

はいこれはwebrequestコールバックの一部であり、毎回実行されます。 – Kwstas

答えて

2

二つのこと、まず、あなたのnowListプロパティは二、あなたのnowListのタイプがあることを確認して、プロパティが変更イベントを上げていることを確認しますがObservableCollection<Update>

<edit> 

nowListはあなたのリストボックスである場合は、それはおそらくあなたのculprite、より多くのです。変更イベントを発生させるプロパティとしてObservableCollection<Update>を作ってみてください、そして、あなたのXAMLのものにあなたのリストボックスをバインドする...

<ListBox ItemSource={Binding myList}/> 

私は

</edit> 
+0

プロパティはUpdateクラスのINotifyPropertyChangedインタフェースを実装しています。 nowListはListBoxです。 – Kwstas

+0

@Kwstas nowListのItemsSourceを設定する行 - ObservableCollection である必要がありますが、IEnumerable です。 –

関連する問題