我无法让 MVVM 工作
本文关键字:MVVM 工作 | 更新日期: 2023-09-27 17:57:05
我拼命地尝试实现MVVM,但由于某种原因它不起作用。我在 Windows 8.1 应用商店应用程序上使用 MVVM 灯。
我做错了什么?我现在遵循了三个教程,似乎没有任何效果。.
我从 Web 服务中检索数据,这部分 100% 工作得很好。可观察集合包含数据。
我的其余代码如下所示:
视图模型定位器:
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
if (ViewModelBase.IsInDesignModeStatic)
{
// Create design time view services and models
SimpleIoc.Default.Register<IDesignTimeWeatherServiceLayer, DesignTimeWeatherServiceLayer>();
}
else
{
// Create run time view services and models
SimpleIoc.Default.Register<IWeatherServiceLayer, WeatherServiceLayer>();
}
SimpleIoc.Default.Register<WeatherViewModel>();
}
public WeatherViewModel Weather
{
get
{
return ServiceLocator.Current.GetInstance<WeatherViewModel>();
}
}
视图模型:
public class WeatherViewModel : ViewModelBase
{
WeatherServiceLayer serviceLayer = new WeatherServiceLayer();
public async void GetAllWeatherData()
{
WeatherData = await serviceLayer.GetAllWeatherAsync();
}
private ObservableCollection<Weather> weatherData;
public ObservableCollection<Weather> WeatherData { get { return weatherData; } set { weatherData = value; RaisePropertyChanged("WeatherData"); } }
}
代码隐藏:
public MainPage()
{
this.InitializeComponent();
WeatherViewModel vm = new WeatherViewModel();
vm.GetAllWeatherData();
}
视图:
...
DataContext="{Binding Weather, Source={StaticResource Locator}}">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<GridView ItemTemplate="{StaticResource WeatherItemTemplate}" ItemsSource="{Binding Weather.WeatherData, Source={StaticResource Locator}}"/>
</Grid>
数据模板:
<DataTemplate x:Key="WeatherItemTemplate">
<StackPanel>
<TextBlock Text="{Binding Temperature}" Height="60" Margin="15,0,15,0"/>
<TextBlock Text="{Binding WeekDay}" Margin="15,0,15,10"/>
</StackPanel>
</DataTemplate>
我不确定,但有几件事对我来说似乎很可疑。 最初,您设置数据上下文属性。 你确定你的数据上下文是你在这个任务之后所期望的吗? 调用 InitializeComponent 进行检查后,可以在视图的构造函数中设置断点。
此外,在您的 ItemsSource 绑定中,您说的是"Weather.WeatherData"来源于您的定位器。 这似乎是多余的,也许是错误的。 也许只是尝试"天气数据"并删除源规范。 如果你的 DataContext 是一个天气,那么它将是用于该 xaml 文件中的所有绑定的对象。