0

我是 WP8 开发的新手。我已经学习了几个星期的在线课程,课程的第二个任务是开发一个应用程序来显示天气、一些与城市相关的新闻和照片。到目前为止,我已经按照 MVVM 模式开发了应用程序,使用 Panorama 控件作为我需要显示的不同内容的容器。为了不再这样,我现在面临的问题是显示从 web 服务检索的 xml 数据。

XAML 是:

<phone:panorama x:Name="myPanorama"
            DataContext = {Binding Source="WeatherViewModel"}>
   <PanoramaItem header="MyWeather">
      <Textblock x:name="txtCity"
       Text = {Binding Weather.City}
      </Textblock>       
   </PanoramaItem>
   <panoramaItem header="Config">
      <Text x:Name="txtGetCity"/>
      <Button x:Name="btnGetCity"
              Command={Binding GetWeatherCommand}/>
   </panoramaItem>
</phone:panorama>

我的视图模型:

public class WeaterViewModel : NotificationEnableObject
{
   private Weather _currentWeather;        
   public Weather GetCurrentWeather
   {
        get
        {
            if (_currentWeather == null)
                _currentWeather = new Weather();

            return _currentWeather;
        }
        set { _currentWeather = value;
        OnPropertyChanged("GetCurrentWeather"); 
        }
 }

//Constructor        ServiceModel serviceModel = new ServiceModel();
 public WeatherViewModel()
 {
        serviceModel.GetWeatherCompleted += (s, a) =>
        {
            _currentWeather = new Clima();
            _currentWeather.City= a.Results[0].City;
            _currentWeather.tempC = a.Results[0].tempC;
        };

        getWeatherCommand = new ActionCommand(null);
  }

   ActionCommand getWeatherCommand;  // ActionCommand derivied from ICommand      
   public ActionCommand GetWeatherCommand
    {
        get
        {
            if (getWeatherCommand!= null)
            {
                getWeatherCommand = new ActionCommand(() =>
                    {
                        //Call the Service who retrieved the data
                    });
            }

            return getWeatherCommand;
        }
    }

}

指定的 Weather 是一个包含 City 属性的公共类。我也尝试过使用 IObservableCollention 但是,结果是一样的:-(

正如您在全景控件中看到的那样,我有 2 个部分。我在其中写下我想看到的城市,以及我展示从 Web 服务获得的信息的部分。

任何线索或帮助将不胜感激

问候!

4

1 回答 1

0

好的,我认为这很容易解决。你这样设置GetCurrentWeather


_currentWeather = new Clima();
_currentWeather.City= a.Results[0].City;
_currentWeather.tempC = a.Results[0].tempC;

这不是触发PropertyChanged事件。将其更改为:


GetCurrentWeather= new Clima();
GetCurrentWeather.City= a.Results[0].City;
GetCurrentWeather.tempC = a.Results[0].tempC;

你应该没事。

于 2013-06-24T18:34:59.030 回答