通用Windows应用《博客园-开发者的网上家园》开发(1)——MVVM模式
2020-12-13 06:09
标签:style blog http color 使用 os io 数据 最近开发了个WP8.1和Windows8.1平台上的应用——《博客园-开发者的网上家园》,基于 Windows Runtime 。在此有必要说明一下,WP8.0以前的应用程序是基于Silverlight的,微软为了统一Windows Phone OS 和 Windows RT,从开发人员的角度上,也统一了两个平台上大部分的API,使得开发人员可以共享代码(而不是一次编写,跨平台运行)。 本文着重描述MVVM在Windows Runtime应用程序下的表现,关于MVVM模式的理解,可参考园子里 天神一 的博客——《MVVM架构的简单解析》。 来看Model的代码 再看ViewModel 先看看 INotifyPropertyChanged 这个接口的定义: 这个接口只定义了一个事件:PropertyChanged,属性改变。接口的说明告诉我们,这个接口的作用在于当我用于绑定在UI上的数据源发生改变的时候,可以向界面发出通知,让界面做出相应的改变。 ViewModel实现了INotifyPropertyChanged接口,当ViewModel改变时可以通知UI做出相应的改变,同时,不使用List ObservableCollection 另外在ViewModel中自定义了两个方法:LoadBlogsAsync(int pageIndex, int pageSize) 和 LoadMoreBlogsAsync(int count),都是异步方法。 在App.xaml.cs里定义一个静态属性ViewModel,用于全局访问 上面说到延迟加载,直至需要时。那么什么时候需要呢,当然是我们在页面上需要展示数据的时候。在MainPage.xaml的构造方法里,我们去创建ViewModel,并赋值给MainPage的数据上下文。 并在导航到该页面的时候加载ViewModel的数据: 上面便实现了所谓的延时加载。 剩下的便是如何在UI上绑定了 布局可无视。 下面是广告时间,凭良心进。 windows 应用商店app(windows 8.1 +):http://apps.microsoft.com/windows/zh-cn/app/4f20c8c7-2dfa-4e93-adcb-87acde53d4be windows phone 应用商店app(windows phone 8.1 +):http://www.windowsphone.com/s?appid=71e79c48-ad5d-4563-a42f-06d59d969eb8 第一版功能比较鸡肋,后续版本将添加更多功能。如果有什么好的建议的,希望在商店里提出,或者博客里留言,我将综合各方意见打造一个体验更好的win平台的博客园app。 最后晒下图吧: 通用Windows应用《博客园-开发者的网上家园》开发(1)——MVVM模式,搜素材,soscw.com 通用Windows应用《博客园-开发者的网上家园》开发(1)——MVVM模式 标签:style blog http color 使用 os io 数据 原文地址:http://www.cnblogs.com/rainlam163/p/3898387.html 1 public class Blog
2 {
3 ///
public class Author
{
///
1 public class ViewModel : INotifyPropertyChanged
2 {
3 public ViewModel()
4 {
5 this.Blogs = new ObservableCollection
INotifyPropertyChanged接口定义
1 // 摘要:
2 // 表示一个动态数据集合,在添加项、移除项或刷新整个列表时,此集合将提供通知。
3 //
4 // 类型参数:
5 // T:
6 // 集合中的元素类型。
7 public class ObservableCollection
1 private static ViewModel viewModel = null;
2 ///
1 public MainPage()
2 {
3 this.InitializeComponent();
4 DataContext = App.ViewModel;
5 }
1 protected override async void OnNavigatedTo(Windows.UI.Xaml.Navigation.NavigationEventArgs e)
2 {
3 MyProgressBar.Visibility = Visibility.Visible;
4 if (!App.ViewModel.IsLoaded)
5 {
6 await App.ViewModel.LoadBlogsAsync(1, App.PageSizeBlog);
7 }
8 MyProgressBar.Visibility = Visibility.Collapsed;
9 }
1 ListBox Loaded="GridViewData_Loaded" SelectionChanged="GridViewData_SelectionChanged" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Foreground="{ThemeResource ApplicationForegroundThemeBrush}" Name="GridViewData" ItemsSource="{Binding Blogs,Mode=TwoWay}">
2 ListBox.ItemTemplate>
3 DataTemplate>
4 StackPanel>
5 TextBlock FontSize="18" Text="{Binding Title}" TextWrapping="Wrap">TextBlock>
6 StackPanel Orientation="Horizontal" Margin="0 12">
7 TextBlock Text="{Binding Author.Name}" Foreground="#FF2B6695">TextBlock>
8 TextBlock Text="发布于" Margin="6 0">TextBlock>
9 TextBlock Text="{Binding Published}" Margin="0 0 6 0">TextBlock>
10 TextBlock Text="评论(">TextBlock>
11 TextBlock Text="{Binding Comments}">TextBlock>
12 TextBlock Text=")" Margin="0 0 6 0">TextBlock>
13 TextBlock Text="阅读(">TextBlock>
14 TextBlock Text="{Binding Views}">TextBlock>
15 TextBlock Text=")">TextBlock>
16 StackPanel>
17 Grid HorizontalAlignment="Left">
18 Grid.ColumnDefinitions>
19 ColumnDefinition Width="Auto"/>
20 ColumnDefinition/>
21 Grid.ColumnDefinitions>
22 Image HorizontalAlignment="Left" Width="48" Height="48" Source="{Binding Author.Avatar}" Grid.Column="0" VerticalAlignment="Top"/>
23 TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Padding="12 0" Grid.Column="1" Text="{Binding Summary}">TextBlock>
24 Grid>
25 Canvas Background="#FF2B6695" Height="2" Width="1600" Margin="0 12 12 0"/>
26 StackPanel>
27 DataTemplate>
28 ListBox.ItemTemplate>
29 ListBox>
文章标题:通用Windows应用《博客园-开发者的网上家园》开发(1)——MVVM模式
文章链接:http://soscw.com/essay/32586.html