在 Windows Phone 中更新 binding/staticresource
Update binding/staticresource in Windows Phone
在我的 xaml 代码中,我将 class "Feed" 添加到我的资源中。像这样:
<Page.Resources>
<data:Feed x:Key="Feed"></data:Feed>
</Page.Resources>
class 包含 属性 Apod 和稍后更新 属性 的方法。
private ApodModel _apod;
public ApodModel Apod
{
get { return _apod; }
set { _apod = value; }
}
public Feed()
{
DownloadApod();
}
private async void DownloadApod()
{
try
{
using (HttpClient client = new HttpClient())
{
HttpResponseMessage response = await client.GetAsync(new Uri("http://spacehub.azurewebsites.net/api/apod", UriKind.Absolute));
if (response.IsSuccessStatusCode)
{
string json = await response.Content.ReadAsStringAsync();
Apod = JsonConvert.DeserializeObject<ApodModel>(json);
var apod = new AppSettings<ApodModel>();
await apod.SaveAsync("Apod", Apod);
}
}
}
catch (Exception)
{
}
}
在我的 XAML 中,我对 属性 的绑定如下所示:
<StackPanel DataContext="{StaticResource Feed}">
<TextBlock Text="{Binding Apod.Description}">
</StackPanel>
当我调试 属性 Apod 得到更新但它在 XAML 中没有改变。我做错了什么?
您需要在 "Apod" 属性 更改时通知视图(否则,它将最初读取 属性 值作为其默认值 null
,并且永远不会再次)。为此,请让您的 "Feed" class 实施 INotifyPropertyChanged
,并在 "Apod" 属性 setter 中引发 PropertyChanged
事件。
您需要使用 INotifyPropertyChange
来实现您的 class
他们实现接口。
private ApodModel _apod;
public ApodModel Apod
{
get { return _apod; }
set { _apod = value;
NotifyPropertyChange("Apod");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChange(string name)
{
if(PropertyChanged!=null)
{
PropertyChanged(this,new PropertyChangedEventArgs(name));
}
}
在我的 xaml 代码中,我将 class "Feed" 添加到我的资源中。像这样:
<Page.Resources>
<data:Feed x:Key="Feed"></data:Feed>
</Page.Resources>
class 包含 属性 Apod 和稍后更新 属性 的方法。
private ApodModel _apod;
public ApodModel Apod
{
get { return _apod; }
set { _apod = value; }
}
public Feed()
{
DownloadApod();
}
private async void DownloadApod()
{
try
{
using (HttpClient client = new HttpClient())
{
HttpResponseMessage response = await client.GetAsync(new Uri("http://spacehub.azurewebsites.net/api/apod", UriKind.Absolute));
if (response.IsSuccessStatusCode)
{
string json = await response.Content.ReadAsStringAsync();
Apod = JsonConvert.DeserializeObject<ApodModel>(json);
var apod = new AppSettings<ApodModel>();
await apod.SaveAsync("Apod", Apod);
}
}
}
catch (Exception)
{
}
}
在我的 XAML 中,我对 属性 的绑定如下所示:
<StackPanel DataContext="{StaticResource Feed}">
<TextBlock Text="{Binding Apod.Description}">
</StackPanel>
当我调试 属性 Apod 得到更新但它在 XAML 中没有改变。我做错了什么?
您需要在 "Apod" 属性 更改时通知视图(否则,它将最初读取 属性 值作为其默认值 null
,并且永远不会再次)。为此,请让您的 "Feed" class 实施 INotifyPropertyChanged
,并在 "Apod" 属性 setter 中引发 PropertyChanged
事件。
您需要使用 INotifyPropertyChange
来实现您的 class他们实现接口。
private ApodModel _apod;
public ApodModel Apod
{
get { return _apod; }
set { _apod = value;
NotifyPropertyChange("Apod");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChange(string name)
{
if(PropertyChanged!=null)
{
PropertyChanged(this,new PropertyChangedEventArgs(name));
}
}