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
}
私は間違っていると誰に教えてくれますか?ありがとう!
はあなたがあなたの問題を解決することを比較的確信していますXMLが更新されるたびに 'Dispatcher.BeginInvoke(()=> nowList.ItemsSource = list);部分を呼び出します。 –
はいこれはwebrequestコールバックの一部であり、毎回実行されます。 – Kwstas