国产精品青草久-国产精品情侣愉拍-国产精品区网红主-国产精品区一区二-国产精品热久久-国产精品热热热-国产精品人aⅴ-国产精品人成在线-国产精品人妻人伦-国产精品人人

金喜正规买球

MVVM模式實現主從數據顯示

轉帖|其它|編輯:郝浩|2011-03-11 10:25:51.000|閱讀 827 次

概述:原來想用主從數據顯示的例子記錄頁面間切換的方法的,后來在園子里看到有一篇寫頁面切換的文章介紹得很詳盡了,代碼做了一半,真是雞肋啊。于是想,干脆把代碼改改,弄成個MVVM模式來展示主從數據吧。

# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>

  原來想用主從數據顯示的例子記錄頁面間切換的方法的,后來在園子里看到有一篇寫頁面切換的文章介紹得很詳盡了,代碼做了一半,真是雞肋啊。于是想,干脆把代碼改改,弄成個MVVM模式來展示主從數據吧。

  為了突出重點,示例不考慮美工方面的問題——嘿嘿,美工實在太差了,各位見諒。

  首先來看完成后的效果:

  啟動時候,顯示一個空的頁面,點擊“Show Data”,顯示出所有的班級信息。

SilverlightMVVM

  當用戶點擊其中某一個班級的時候,跳轉到一個班級的學生列表中去。詳細信息頁面底部還提供一個返回按鈕,可以返回到班級選擇的頁面:

SilverlightMVVM02

  整個項目完成了以后,結構如下:

SilverlightMVVM03

  項目大體上分為Models、Views和ViewModels三個部分。其中,Models又被細分為“Entities”、“Interfaces”和“Services”三個部分。

  Models

  Models主要存放兩件東西:1.實體類。2.提供的服務。實體類是指對事物的屬性的抽象構成的類——這個好像比較抽象啊:-)其實,非常簡單,就是一些代表事物的屬性的集合,例如,一個班級的ID和名稱就代表著一個班級,我們就寫成Classes類:

namespace SilverlightNotes.Navigate.Models.Entities
{
     public class Classes
     {
         public int ID { get; set; }
         public string Name { get; set; }
     }
}

  類似的,我們把一個學生抽象成由“編號”、“姓名”和“班組”組成,就有了Student類:

namespace SilverlightNotes.Navigate.Models.Entities
{
     public class Student
     {
         public int ID { get; set; }
         public string Name { get; set; }
         public int ClassID { get; set; }
     }
}
 

  我們看到,實體類只有屬性,沒有方法。通常,我們需要從某個地方去獲取數據來填充或者說生成這些實體類的實例,我們把這一些獲取數據的方法做成服務接口。這些接口被統一存放在Interfaces下面。以下是班級類的接口:

using System.Collections.Generic;
using SilverlightNotes.Navigate.Models.Entities;
namespace SilverlightNotes.Navigate.Models.Interfaces
{
     ///  <summary>
     /// Provide student related services
     ///  </summary>
     public interface IClassesService
     {
         ///  <summary>
         /// Get all classes
         ///  </summary>
         ///  <param name="belongTo"></param>
         ///  <returns></returns>
         List <Classes> GetClasses();
     }
}

  類似的,學生類的服務接口如下:

using System.Collections.Generic;
using SilverlightNotes.Navigate.Models.Entities;
namespace SilverlightNotes.Navigate.Models.Interfaces
{
     ///  <summary>
     /// Provide student related services
     ///  </summary>
     public interface IStudentService
     {
         ///  <summary>
         /// Get all students in a class
         ///  </summary>
         ///  <param name="belongTo"></param>
         ///  <returns></returns>
         List <Student> GetStudentByClasses(Classes belongTo);
     }
}

 然后,我們需要具體的服務來完成這一些接口。這些服務應該是通過訪問數據庫啊之類的數據存儲,來提供實體類實例數據。這里為了演示,只寫了兩個假的數據提供類,來提供一些示例數據,它們分別實現了IClassesService接口和IStudentService接口:

using System.Collections.Generic;
using SilverlightNotes.Navigate.Models.Entities;
using SilverlightNotes.Navigate.Models.Interfaces;

namespace SilverlightNotes.Navigate.Models.Services
{
     public class MockClasses : IClassesService
     {
         ///  <summary>
         /// Return mocked 5 classes
         ///  </summary>
         ///  <returns></returns>
         public List <Classes> GetClasses()
         {
             const int classCount = 5;
             List <Classes> result = new List<Classes>(classCount);
             for (int i = 0; i  < classCount; i++)
             {
  result.Add(new Classes() { ID = i, Name = string.Format( "Class - {0}", i + 1) });
             }
             return result;
         }
     }
}

  和

using System.Collections.Generic;
using SilverlightNotes.Navigate.Models.Entities;
using SilverlightNotes.Navigate.Models.Interfaces;

namespace SilverlightNotes.Navigate.Models.Services
{
     public class MockStudent:IStudentService
     {

         public List <Student> GetStudentByClasses(Classes belongTo)
         {
             const int studentCount = 15;
             List <Student> result = new List<Student>(studentCount);
             //Create faked student objects and add them into the collection
             for (int i = 0; i  < studentCount; i++)
             {
                 result.Add(new Student() { ID = i + 1000, ClassID = belongTo.ID, Name = string.Format( "Student{0}", i + 1) });
             }
             return result;
         }
     }
}

 

  好,Model部分完成。

  View

  理論上講,在MVVM模式中,View和Model是可以同時進行的。因為這兩部分不會直接產生任何關系。我們需要做的,只是把界面“畫”出來。本例中,一共需要三個View:MainPage、ClassesView和StudentView。

  在這里MainPage類似于ASP.NET中的“MasterPage”的作用:我們用一個TextBlock來提供頁面的標題,然后,用Border來模擬一個PlaceHolder,初步的想法是,頁面切換時,只需要修改Border.Child屬性即可。呵呵,在此偷個懶,其實所有的界面是用Blend畫出來的。簡單的來看一下MainPage的XAML吧:

   <Grid x:Name="LayoutRoot" Background="White">
         <Grid.ColumnDefinitions>
             <ColumnDefinition Width="25"/>
             <ColumnDefinition/>
             <ColumnDefinition Width="25"/>
         </Grid.ColumnDefinitions>
         <Grid.RowDefinitions>
             <RowDefinition Height="26"/>
             <RowDefinition Height="36"/>
             <RowDefinition Height="314"/>
             <RowDefinition Height="24"/>
         </Grid.RowDefinitions>
         <TextBlock Grid.Column="1" Grid.Row="1" TextWrapping="Wrap" 
FontFamily="Trebuchet MS" FontSize="18.667"/>
  <Border x:Name="bdrPlaceHolder" Grid.Column="1" Grid.Row="2"
  BorderBrush= "Black" BorderThickness="1" />
     </Grid>

  這是一個4行3列的Grid,其實周邊一圈是Margin,剩下2行1列。第1行放了一個TextBlock,用來放標題,例如“MVVM Navigation Demo”。Border的作用,前面已經講過。

  ClassesView中直接放了一個StackPanel,然后堆上一個“Show Data”的Button和一個顯示數據的ListBox,就可以交差了。而StudentView則堆放了一個DataGrid和一個Button。

  ViewModel

  ViewModel是View和Model之間的紐帶。我們把View綁定到ViewModel的類上,而ViewModel類同時又包裝了Model的實體和服務。這樣,當用戶對界面操作時,會引發ViewModel的變化。ViewModel調用Model提供的服務,修改其包裝的實體或實體集。由于這些實體或者實體集同樣被綁定到了界面,因此,界面對用戶的操作作出反應。

  那么,如何來創建ViewModel類?讓我們以MainPageViewModel類為例:

一、依葫蘆畫飄——看View搭出ViewModel類

  打開MainPage,觀察,它有一個TextBlock,因此,我們需要一個string類型的屬性;它有一個Border作為PlaceHolder,因此,我們需要一個UIElement類型的屬性;它可以加載ClassesView,因此,我們有一個加載ClassesView的方法(NavigateToClasses);它又可以加載StudentView,因此,我們又有了一個加載StudentView的方法(NavigateToStudnet)。創建出的類如下:

using System.ComponentModel;
using SilverlightNotes.Navigate.Views;
using SilverlightNotes.Navigate.Models.Entities;

namespace SilverlightNotes.Navigate.ViewModels
{
     public class MainPageViewModel : INotifyPropertyChanged
     {
         #region Construction
         private ClassesView _classesViewCache;
         public MainPageViewModel()
         {
             PageTitle =  "MVVM Navigation Demo";
         }
         #endregion

         #region Properties
         public string PageTitle { get; set; }
         public UIElement DisplayContent { get; set; }
         #endregion 

         #region Faked Commands
         public void NavigateToClasses()
         {
         }

         public void NavigateToStudent(Classes selectedClass)
         {
         }
         #endregion
     }
}

二、綁定屬性,添加方法調用代碼

  ViewModel類創建之后,我們就可以把屬性和對應的控件綁定起來。例如,把PageTitle綁定到MainPage的TextBlock上:

<TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding PageTitle}"
  TextWrapping="Wrap" FontFamily="Trebuchet MS" FontSize=&quot;18.667"/>  

  綁定以后,需要修改ViewModel類,對于一般的屬性,修改時需要觸發“PropertyChanged”事件,而對于集合類屬性,則最好使用ObservableCollection類型的集合。以MainPage中的PageTitle為例,首先要讓其實現“INotifyPropertyChanged”接口,而在屬性修改時,需要觸發相應事件:

using System.ComponentModel;
using SilverlightNotes.Navigate.Views;
using SilverlightNotes.Navigate.Models.Entities;

namespace SilverlightNotes.Navigate.ViewModels
{
     public class MainPageViewModel : INotifyPropertyChanged
     {
         #region Events
         public event PropertyChangedEventHandler PropertyChanged = delegate { };
         #endregion

         #region Construction
         private ClassesView _classesViewCache;
         public MainPageViewModel()
         {
             PageTitle =  "MVVM Navigation Demo";
         }
         #endregion

         #region Properties
         private string _pageTitle;
         public string PageTitle
         {
             get
             {
                 return _pageTitle;
             }
             set
             {
                 _pageTitle = value;
                 PropertyChanged(this, new PropertyChangedEventArgs( "PageTitle"));
             }
         }
...
         #endregion 
...
     }
}

于不想每次判斷事件是否被注冊,因此,事件聲明的時候,就給它加了個匿名方法,也省得考慮什么線程安全等麻煩事了。

  由于我們期望在主頁面載入的時候就自動加載班級的頁面,因此,我們在MainPage的構造函數里添加少許代碼:

 public partial class MainPage : UserControl
     {
         public MainPage()
         {
             InitializeComponent();
             InitializeDataBind();
         }

         private void InitializeDataBind()
         { 
             var mainPageViewModel = new MainPageViewModel();
             this.DataContext = mainPageViewModel;
             mainPageViewModel.NavigateToClasses();            
         }
     }

  我們首先創建了一個MainPageViewModel的實例作為本頁的ViewModel賦給DataContext,然后,調用其NavigateToClasses,讓其加載班級頁。

  另外一種比較典型的情況是,用戶點擊按鈕,調用方法改變界面狀態。例如我們在School頁面里的“Back”按鈕。

三、調用Model,實現方法

  我們是想著讓MainPage來顯示班級視圖,但實際上,這個方法還沒有實現。讓我們來看一下其實現:

using System.ComponentModel;
using SilverlightNotes.Navigate.Views;
using SilverlightNotes.Navigate.Models.Entities;

namespace SilverlightNotes.Navigate.ViewModels
{
     public class MainPageViewModel : INotifyPropertyChanged
     {
         #region Construction
         private ClassesView _classesViewCache;
         public MainPageViewModel()
         {
             PageTitle =  "MVVM Navigation Demo";
         }
         #endregion

         #region Properties
...
         #endregion 

         #region Faked Commands
         public void NavigateToClasses()
         {
             if (_classesViewCache == null)
             {
                 ClassViewModel classViewModel = new ClassViewModel();
                 ClassesView classesView = new ClassesView();
                 classesView.DataContext = classViewModel;
                 _classesViewCache = classesView;
                 DisplayContent = classesView;
             }
             else
             {
                 DisplayContent = _classesViewCache;
             }
         }

         public void NavigateToStudent(Classes selectedClass)
         {
...
         }
         #endregion
     }
}

  首先,檢查了一下有沒有頁面的緩存,如果沒有,那么創建一個新的頁面對象和它對應的ViewModel,設定好DataContext以后,我們就重新設置DisplayContent屬性。由于DisplayContent屬性會觸發&ldquo;EventChanged”事件,界面會回應此事件作出相應的變動。

  這個頁面由于沒有涉及到具體后來數據的操作,因此,并沒有直接調用Model里的服務。我們再來看一下比較典型的ViewModel:

using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using SilverlightNotes.Navigate.Models;
using SilverlightNotes.Navigate.Models.Entities;
using SilverlightNotes.Navigate.Models.Interfaces;

namespace SilverlightNotes.Navigate.ViewModels
{
     public class ClassViewModel:INotifyPropertyChanged
     {
         public ClassViewModel()
         {
             Data = new ObservableCollection <Classes>();
         }

         #region Data
         public ObservableCollection <Classes> Data { get; protected set; }
         #endregion

         #region Facked Commands
         public virtual void ShowData()
         {
             //clean original data first
             Data.Clear();
             //Get data
             IClassesService classService = ServiceProvider.GetClassesService();
             //Add them into the Observable collection
             foreach (var item in classService.GetClasses())
             {
                 Data.Add(item);
             }
         }
         #endregion

  public event PropertyChangedEventHandler PropertyChanged = delegate { };
     }
}

  Data屬性即對外暴露的數據集。ShowData方法中,首先清空原來Data中的數據;然后,創建了一個實現IClassService的服務對象。最后,把數據項一一更新到Data集合里去。我們再次看到,由于ViewModel和View是綁定在一起的,因此,我們在寫代碼的時候,不需要去考慮頁面的更新。

  意外

  本來,這個Demo到此已經全部結束,運行一下,出現卻得到一個十分詭異的異常—&mdash;AG_E_RUNTIME_MANAGED_UNKNOWN_ERROR:

  看上去像是XAML的解析出了問題,跟著行列到MainPage.xaml里找了一通,也沒看出什么問題來。G了一下,才知道是Broder.Child屬性不能正常綁定。應該是一個Silverlight的Bug。這下暈了,這樣的話,如果要用ViewModel來控制Navigation,就得在ViewModel里設置頁面上“Border.Child”屬性,這下子View和ViewModel由綁定這種較松的耦合變成代碼的強耦合……后來考慮了一下,借鑒INotifyProperty接口的實現方法,在MainPageViewModel的類里添加一個事件,當DisplayContent修改時,觸發這個事件。在View里只需要少量的代碼,就可以實現類似于單向綁定的效果:

  修改后的MainPageViewModel類:

using System.ComponentModel;
using SilverlightNotes.Navigate.Views;
using SilverlightNotes.Navigate.Models.Entities;

namespace SilverlightNotes.Navigate.ViewModels
{
     public class MainPageViewModel : INotifyPropertyChanged
     {
         #region Events
         ///  <summary>
         /// Provide to inform observers that DisplayContent changed

 we can't bind a user control to a child of another control.
         ///  </summary>
         public event EventHandler DisplayContentChanged = delegate { };

         public event PropertyChangedEventHandler PropertyChanged = delegate { };
         #endregion

         #region Construction
         private ClassesView _classesViewCache;
         public MainPageViewModel()
         {
             PageTitle =  "MVVM Navigation Demo";
         }
         #endregion

         #region Properties
         private string _pageTitle;
         public string PageTitle
         {
...
         }

         private UIElement _displayContent;
         public UIElement DisplayContent
         {
             get
             {
                 return _displayContent;
             }
             set
             {
                 _displayContent = value;
                 PropertyChanged(this, new PropertyChangedEventArgs( "DisplayContent"));
                 DisplayContentChanged(this, new EventArgs());
             }
         }
         #endregion 

         #region Faked Commands
         public void NavigateToClasses()
         {
...
         }

         public void NavigateToStudent(Classes selectedClass)
         {
...
         }
         #endregion
     }
}

  另外,在MainPage里,也需要做一點點的小功課——誰讓綁定不能用呢:

using SilverlightNotes.Navigate.ViewModels;

namespace SilverlightNotes.Navigate
{
     public partial class MainPage : UserControl
     {
         public MainPage()
         {
             InitializeComponent();
             InitializeDataBind();
         }

         private void InitializeDataBind()
         { 
             var mainPageViewModel = new MainPageViewModel();
             this.DataContext = mainPageViewModel;
             mainPageViewModel.DisplayContentChanged +=
  new EventHandler(mainPageViewModel_DisplayContentChanged);
             mainPageViewModel.NavigateToClasses();            
         }

         private void mainPageViewModel_DisplayContentChanged(object sender, EventArgs e)
         {
             MainPageViewModel mainPageViewModel = this.DataContext as MainPageViewModel;
             if (mainPageViewModel != null)
             {
                 this.Dispatcher.BeginInvoke(
                     delegate
                     {
                         bdrPlaceHolder.Child = mainPageViewModel.DisplayContent;
                     });
             }
         }
     }
}

  寫在最后

  MVVM模式原生應用于WPF,由于Silverlight可以看作是WPF的子集,這一模式同樣可以較好的應用于Silverlight。但是由于Silverlight的不成熟,還存在一些BUG,導致模式中有一些部分不能夠正常應用。但是,我們可以通過一些Work-around,一些靈活處理,在盡可能多的利用模式給我們帶來的便利的同時,完成程序的全部功能。


標簽:

本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn

文章轉載自:網絡轉載

為你推薦

  • 推薦視頻
  • 推薦活動
  • 推薦產品
  • 推薦文章
  • 慧都慧問
掃碼咨詢


添加微信 立即咨詢

電話咨詢

客服熱線
023-68661681

TOP
少妇高潮大叫好爽 | 久久www免费人成精品 | 精品國產福利第一區二區三區 | 日本高清色w | 国产av无码专区亚洲av中文 | 无码国内精品久久人妻 | 国语av最新自产拍在线观看 | 精品国产欧美一区二区三区不卡 | 国产毛片a级久久久不卡精品 | 午夜丰满少妇一级毛影院 | 免费无遮挡无码视频在线观看 | 97无码人妻视 | 国产成人精品久久亚洲高清不卡p | 综合伊人久久在一二三区 | 九九久久自然熟的香蕉图片 | 在线国产亚洲91 | 亚洲成v| 中文字幕爆乳巨爆乳系列无码 | 天天综合91 | 91大神精品视频高清免费观看 | 国产爆乳美女 | 精品欧美成人高清在线观看观看视频 | 日韩精品一区二区三区中文在 | 国产成人a人亚洲精品无码 国产成人a视频高清在线观看 | 国产无码少妇影视 | 亚洲国产精品一区二区不卡 | 国产成人午夜福在线观看 | 午夜男女刺激爽爽影院 | 日韩a一级 | 无码精品一区二区三区视频蜜臀 | 欧美日韩国产免 | 国产一级久久久久久毛片 | 国产91精品在线 | 日韩毛片无码永久免费看 | 精品无人区一区二区三区 | 天天人人综合网7799 | 欧美老年人草逼视频 | 精品香蕉久久久午夜福利 | 亚洲国产成人高清片在线观看 | 亚洲国产av美女网站 | 爱福利视频网 | 一区二区三区欧美 | 国产精品视频一区 | 91热久久免费视频精品欧洲 | 四虎www | 欧美性大战久久久久久久 | 91视频免费版安卓版下载v1.0 | 国产又爽又黄无码无遮 | 国产一区二区精品尤物 | 亚洲av鲁丝一区二区三区 | 国产一级毛片国语版 | 亚洲a无码综合 | 中文字幕伊人国产 | 波多野结衣一区二区三 | 亚洲aν伊人久久综合密臀性色 | 一区二区三区日韩精品 | 日本老司机午夜福利视频 | 99久久综合狠狠综 | 果冻文化传媒官网 | 久久99精品亚洲专区无码 | 国产色婷婷精品免费视频 | 午夜视频在线观看免费观看在线观看 | 欧美性受xxxx黑人xyx性爽 | 在线成人爽a毛片免费软件 在线观看91 | 韩国精品久久久久精品三级 | 精品思思久久99热网 | 无码国模国产在线无码精品 | 91免费视频网址 | 亚洲精品ⅴ在线观看 | 91自产拍在 | 久久99精品一区二区三区 | 亚洲日韩中文字 | 国产一区二区三区在线观看视频 | 精品欧美在线观看视频 | 精品无码国产一区二区入口91 | 91人人双人人妻人人澡 | 91精品国产高清久久福利 | 精品国产a毛片久久久av蜜桃 | 亚洲av成人中文在线观看 | 在线看片免费人成视频国产片 | 天天爽夜夜春 | 91极品尤物电影完整版在线观看 | 不卡国产精品 | 无码中文字幕精品推荐 | 丰满人妻熟妇乱又伦精品 | 99久久国产综合精品女 | 欧美日韩亚洲动漫在线 | 亚洲无码在线观看一区二区 | 日本一姐rapper太多 | 国产欧美成人精品 | 国产高清极品美女黄色网站 | 亚洲国产另类久久久精品网站 | 91精品人妻一区二区三区蜜臀 | 国产a∨国片精品青草社区 国产a∨国片精品一区二区 | 中文国产高清综合乱色视频在线播放 | 日本卡一卡二不卡 | 国产欧美一区二区精品久久久 | 日韩成人精品视频国产在线观看成人 | 欧美高清熟妇啪啪内射不卡自拍 | 国产午夜亚洲精品三区 | 日韩成人av片在线观看 | 91精品国产自产在线观看不卡 | 国产一级精品久久91 | 国产又粗又猛又黄又爽无遮挡 | 92午夜福利在线播放 | 91精品国产福利尤物 | 国产精品嫩草影院永久第一 | 国产精品免费大片 | 丝瓜视频涩涩屋色多多色版成人 | 亚洲欧美变态另类综合 | 国产主播卡通动漫在线 | 日韩一区二区三区精品 | 精品国产乱码久久久 | 无人区一码卡二卡三乱码 | 超碰在线观看97青草国产 | 国产亚洲欧美一区 | 日本免费人成视频在线观看 | 99人妻日韩精品一区二区传媒 | 欧美日韩中文字幕 | 在线观看国产的 | 黄色成人网站免费无码av | 91麻豆精品国产高清在线 | 国产日本在线观看 | 亚洲成av人片一区二区三区 | 国产免费av片在线播放 | 精品国产欧美一区二区三区成人 | 亚洲国产精品一区二区第四页 | 少妇高潮喷水久久久影院 | 一级特黄aaa大片在线观看 | av无码小缝喷白浆在线观看 | 精品久久久久久无码专区不卡 | 欧美亚洲国产激情一区二区 | 中文字幕无码一区在线 | 91久久人澡人人添人人爽 | 国产欧美综合在线一区二区三区 | 成人碰碰视频公开老师 | 国产av无码专区亚洲a∨毛片 | 精品久久久无码人妻字幂 | 亚洲av专区无码观看精品天堂 | 国产精品免费一区二区三区四 | 免费一级做a爰片久久毛片潮 | 国产精品99久久久久人中文网介绍 | 在线日本高清不卡免费v | 国产伦精品一区三区视频 | 特级无码a级毛片特黄 | 亚洲熟妇视频在线观看 | 欧美精品一国产成人综合久久 | www深夜成人网站下载麻豆 | 国产成人无码av片在线观看 | 成人性生交大片免费看vr | 国产美女精品久久久久中文 | 日本日本乱码伦视频在线观看 | 日韩激情五码视频中文字幕 | 丰满少妇愉情中文字幕18禁片 | 国产日韩欧美一区二区东京热 | 成年黄页网站大全免费 | 91游游戏中心官网手游最新版下载 | 精品不卡秀 | 另类欧美日韩综合一区 | 色五月丁香花自拍自偷国产 | 99国产精品永 | 国产青草视频在线观看 | 国产v片在线播放免费观看大全 | 国产日韩欧美中文字幕在线 | 妖精av无码成人精品区在线 | 国产亚洲欧美精品永久app | 免费无码av片在线观看 | 人妻中文字幕无码老熟妇 | 99久久精品费精品国产一区二区 | 精品无码无人网站免费视频 | 东京热加勒比久久综合 | 一区二区三区美女视频免费观看 | 亚洲午夜久久久影院伊人 | 国产v亚洲v | 国产91中文在线播放 | 国产精品一级无码免费播放 | 99久久婷婷国产综合精品草原 | 国产欧美日韩综合精 | 精品一区二区三区视频在线观看免 | 黑人处破女免费播放 | 精品福利一区二区三区免费视频 | 少妇综合久久中文字幕 | 久久成人| a视频在线看无码免费 | 国产色系视频在线观看 | 99久久综合国产精品免费 | 国产欧美日韩精 | 国产片欧美片亚洲片久久综合 | 亚洲精品麻豆视频 | 成人区人妻精品一区二区不卡视频 | 无码国产在线国产97在线 | 国产精品高潮呻吟久久av | 中文字幕乱码亚洲∧v日本1 | 国产日韩欧美 | 亚洲国产av一区二区三区 | 国产一区二区三区四区精华液毛 | 国产精品成人久久综合 | 亚洲91精品麻豆国产系列在线 | 狠狠色丁香婷婷综合尤物 | 国产片精品一区在线播放 | www夜片内射视频日韩精品成人 | 国产高清免费一级a久久 | 99久久精品国产区二区三区日韩 | 99国精品午夜福利 | 国产a不卡片精品免费观看 国产a国产国产片 | 91香蕉国产在线观看免费永久 | 国产午夜精品一区二区三区不卡 | 国产精品免费一级婬片 | 91精品欧美综合在线观看 | 毛片在线观看视频 | 国产亚洲精品a在线看 | 国产美女被遭高潮免费 | 精品久久久久久国产 | 成人午夜性a一级毛片免费 成人午夜性a一级毛片免费看 | 日韩无码亚洲中文字幕 | 国产午夜成人无码免费 | 国产白丝在 | 国产欧美一区二区三区午夜精品 | 免费午夜福利视频在线观看 | 91日本视频| 欧美97色伦欧美一区二区日韩 | 国产高清在线观看91了 | 亚洲av片在线观看内射 | 欧美天天综合色影久久精品 | 国产国拍亚洲 | 成人免费无码成人影院日韩 | 九九操人人操 | 色噜噜亚洲精品中文字幕 | 亚洲国产成人片在线观看 | 国产在线观看无遮挡 | 精品久久久久久综合另类小说 | 91一区二区三区 | 精品日本一区二区三区在线观看 | 国产亚洲国产av网站在j | 日本av二区三区在线 | 亚洲资源站中文在线丝袜 | 欧美人妻制服另类人妻在线 | 亚洲老熟女av一区二区在线播放 | 国产精品免费一区二区区 | 国产午夜福利在线永久视频 | 国产成人久久综合区 | 香蕉国产在线 | 在线免费观看国产 | 国产v天堂在线观看免费 | 欧美高清视频一区 | 欧美日韩精品一区二区在线视频 | 福利一区二区三区 | 国产自产精品爆乳一区二区 | 亚洲a∨天堂无码麻豆电影 亚洲a∨无码成人精品区在线观看 | 日韩欧美国产传媒第一区二区 | 在线观看人成免费视频 | 国产91色在线观看 | 亚洲一区二区免费 | 东京热久久无码av高潮喷 | 亚洲欧美日韩国产精品 | 亚洲国产在线精 | 人人妻人人狠人人爽 | 亚洲一级中文字 | 亚洲国产成人精品无码区在线观看 | 91精品人妻一区二区三区蜜桃 | 亚洲夜夜欢无码一区二区 | 国产三级精品专区欧美激情 | 国产亚洲国产av网站在j | 91九色国产 | 无码视频一区二区三区在线观看 | 欧美日韩中文国产一区 | 91午夜激情 | 日韩av午夜无码专区 | 九九操人人操 | 91桃色无码国产在线观看二区 | 精品高清国产乱子伦 | 国产91福利精品免费观看 | 中日韩一区二区在线观看 | 在线播放国产日韩 | 99日本精品永久免费久久 | a品人v在线播放 | 欧美日韩精品在线视频 | 成人免费播放视频777777 | 国产精品毛片完整版视频 | 99精品众筹| 日本啪视频在线观看精品综合 | 亚洲成av人片在www鸭子 | 韩国三级hd中文字幕我的女友 | 亚洲欧美日韩国产一级a | 成人欧美一区二区三区在线电影 | 91污视频在线观看 | 精品一区三区视频 | 精品视频在线免费播放 | 亚洲国产精品无码久久98 | 一区二区不卡不卡 | 国产精品视频一区二区538 | 国产白丝喷水娇喘视 | 国产91一区二这在线播放 | 91麻豆精品国产高清在线 | 亚洲av无码一区二区三区在线播放 | 亚洲一区二三区好的精华液 | 亚洲成av人片在线 | 亚洲欧美日韩、中文字幕不卡 | 亚洲av网站 | 亚洲av永久无码精品尤物 | 国内精品久久久久久中文字幕 | 日日插人人插天天插 | 亚洲av无码专区国产乱码 | 国产在观线| 在线播放国产一区二区三区 | 久久成年 | 人人弄狠五月丁 | 丰满人妻熟妇乱又伦精品 | 亚洲av无码无在线观看红杏 | 午夜福制92视频 | 成人毛片18女人毛片免费看 | 九九九亚洲精品 | 国产成人精品久久久久 | 欧美日韩精品一区二区三区视频在线 | 韩国国产一区二区三区 | 亚洲中文字幕码在线电影 | 国产午夜精品理伦片 | 日韩视频免费 | 成人精品一区二区 | 九九久久精品无码专区 | 91精品导航在线观看文艺片 | 亚洲乱码国产乱码精品精 | 国产老熟女乱伦一区二区三区 | 69一区二三区好的精华液 | 亚洲精品无码久久久久久久 | 99久久婷婷国产综合精品青草免费 | 亚洲字幕成人中文在线电影网 | 91麻豆精品国 | 国产精自产拍久久久久久蜜 | 91麻豆免费 | 国产伦人人人人人人性 | 欧美日韩在线观看免费 | 午夜电影院理论片8888琪 | 精品午夜福利1000在线观看 | 最新看片国产精品免费在线 | 亚洲aⅴ无码天堂在线观看 亚洲aⅴ无码专区在线观看 | 日韩精品国 | 亚洲国产另类精品 | 国产伦精品一区二区三区网 | 97人人澡人 | 国产免费久久精品99久久 | 国产一级特黄大片在线观看 | 色综合色综合色综合色综合 | 91精品一区二区三区在 | 亚洲a∨无码成人精品区在线观看 | 国产欧美中文字幕 | 欧美va天堂v国产综合 | 久久不见久久见免费影院视频 | 国产无码一区二区三区不卡视频 | 91户外露出一区 | 日韩色情 | 亚洲精品国产精品乱码 | 国产日韩亚洲 | 国产精品露脸国语对白 | 日韩aⅴ精品国内在线 | 日本三级视频在线观看 | 国产精品免费一区二区三区四 | 福利姬液液酱喷水网站在线观看 | a级久久久久久久久精 | 99re8精品视频在线播放 | 亚洲成人亲热国产精品 | 色婷婷综合久久久久中文图片 | aⅴ片在线观看 | 九九av| 91精品国产综合久久久动漫百度 | 国产一级免费 | 办公室大战高跟丝袜秘书经理ol | 三级三级三级a级全黄三电影 | 97久久综合区小说区图片区 | 国产成人黄色网站 | 国产亚洲精品aaaa片在线播放 | 超碰免费超碰免费人人 | 国产卡一在线观看视频 | 欧美综合在线观看 | av天堂东京热无码专区 | 高潮喷奶水在线播放视频 | 欧美精品videossex少妇 | a视频在线看无码免费 | ww国产 | 国产精品夜色视频一区二区三区 | 九九九日韩精品免费视频 | 91久久亚洲亚洲综合精品 | 无码久久精品国产亚洲av影片 | 欧美综合图区亚洲综合图区 | 精品国产品国语在线不卡 | 91精品欧美一区二区综合在线 | 亚洲国产成人精品区综合 | 国产成人精品久久综合 | 日韩经典欧美一区二区三区 | av不卡网站在线免费观看 | av中文字幕网站 | 午夜成人网站在线观看 | 日韩中文无码有码免费视频 | 国产无码高清视频不卡 | 午夜精品无人区乱码1区2在教室轮 | 变态sm天堂无码专区 | 激情影视乱码av | 91人妻无码精品一区二区三区 | 国产a级毛片 | 国产亚洲精品久久久ai换脸 | 国产日韩欧美一区二区三区精品 | 韩国理论片久久电影网 | 日韩精品搭讪在线视频播放 | 福利姬液液酱喷水 | 国产亚洲一区在线观看一区二区 | 成人福利在线观看免费视频 | 国产三级高清视频在线观看 | 午夜视频在线观看免费观看在线观看 | 日韩中文字幕免费视频 | 在线播放无码后入内射少妇 | 国产成人久久精品二区三区 | 国产精品日韩有码中文字幕 | 国产成人一区二区三区精品综合 | 少妇高潮喷水惨叫久无码一区二区 | 国产av旡码专区亚洲av | 国产av国片 | 亚洲阿v天堂| 欧美精品成人久久网站 | 97se狠狠狠狠狼鲁亚洲综 | 日韩午夜资源在线 | 国产av大陆精品一区二区三区 | 亚洲综合性av私人影院 | 国产女人aaa级久久久级 | 亚洲精品综合精品自拍 | 欧美人与动物交配播放视频在线观看 | 日本成熟丰满老妇xxxx | 亚洲成av人在线观看无码不卡 | 欧美日韩国产成人综合在线影院 | 国产成人亚洲精品无码av | 亚洲国产欧美不卡在线 | 婷婷综合另类小说色区 | 97伦理电影全集在线观看 | 99久久久国产精品免费蜜臀 | 无码av | 深夜a级毛片免费视频 | 国产露脸对白91精品 | 海角社区视频精品熟妇乱久久久 | 丰满人妻一区二区三区免费视频 | 在线观看av网站永久免费观看 | 内射中出日韩无国产剧情 | 国产日韩av一区二区三区无码 | 国产自拍电影天堂 | 亚洲国产成人精品久久 | 亚洲无码高清福利久久 | 91成人精品爽啪在线观看 | 亚洲视频在线网 | 亚洲精品视频一区二 | 99久久精品国产高清一区二区 | 日本久久综合欧 | 日本不卡一区二区 | 亚洲成年人电影在线观看 | 美女高潮黄又色高清视频免费 | 91香蕉在线观看 | 国产免费av在线免费无码看 | 亚洲暴爽av天天爽日日碰 | 日本高清视频色惰www无不卡 | 欧美高清一区三区在线专区 | 少妇被粗大猛进进出出s小说 | 国产精品视频专区 | 国产综合久久99久久 | 国产va在线 | 国产毛片a级久久久不卡精品 | 亚洲欧美日韩国产高清在线播放 | 国产大片黄在线观看私人影院 | 国产va在线 | 国产福利精品在线观看 | 午夜手机福利国产2000 | 国产精品.xx视频.xxtv | 国产精品一区二区视色 | 精品自拍视频在线观看电影 | 九九久久精品无码专区 | 国产精品无码久久久久成人麻豆 | 国产免费无码av片在线观看不 | 91人妻人人澡人人爽人人精品乱 | 亚洲tv| 国产精品无码a∨精品影院 国产精品无码av无码 | 三级理论中文字 | 午夜影视 | 成人免费一级纶理 | 99国产在线 | 东京热一区二区三区无码视频 | 天天夜碰日日摸日日澡性色av | 国产成人精品一区二区三区… | 国产成人喷潮在线观看 | 国产大学生喷水流白浆视频 | 国产成人无码精品久久久影院 | 国产精品国产三级国产an首页 | 精品少妇无码av专区在线观看 | 精品久久久久久久一区二区 | 超碰在线播放97青草 | 午夜国产大片免费观看 | 97se亚洲国产综合自在线 | 亚洲中文字幕久久精品无码喷水 | 99久久国产视频 | 亚洲中文字幕久久精品无码喷水 | 中文字幕乱码亚洲第一页 | 欧美性x| 97超级碰碰碰久久久久 | 99久久麻豆a | 国产午夜福利精品久久2025 | 日韩成人av在线一区二区三区 | 无码一区在线 | 丰满熟女人妻大乳波多野吉衣 | 中文字幕无码日韩欧免费软件 | 亚洲精品成人区在线观看 | 日本a一级毛| 99精品国产高清一区二区麻豆 | 国内精品一级毛片免费看 | 91在线网站| 狠狠色成人一区二区三区 | 色一情一区 | 日韩人妻无码潮喷中文视频 | 亚洲一区二区三区精品动漫在线登录 | 国产曰的好深好爽免费视频 | 国产v片在线播放免费观 | 日本十八禁视频无遮挡 | 国偷自拍视频在线观看 | 亚洲午夜无码片在线观看影院百度 | 国产伦精品一区二区三区 | 97久人人做人人妻人人玩精品 | 国产在线拍揄自揄视精品一区 | 亚洲欧美国产一 | 亚洲精品一区二区三区午夜不卡片 | 91精品国产免费 | 香蕉污黄 | 欧美freesex黑人又粗又大长 | 日韩欧美综合 | 久久99精品久久久久久hb | 国产精品美女久久久久av福利 | 国产黄色大片 | wwwxxx国产在线 | 在线观看不卡无码国产 | 中文字幕在线播放 | 国产福利小视频在线免费观看 | 亚洲国产成人精品无码 | 亚洲av无码片区一区二区三区 | 国产尤物精品不卡 | 亚洲av无码久久寂寞少妇多毛 | 精品一区二区三区影院在线 | 日本欧美在线高清 | 亚洲国精产品二二三三区 | 人妻暴雨中被强制侵犯在线 | 国产一道精品视频一区二区三区 | 69久久国产露脸精品国产 | 人妻少妇偷人系列 | 国产午夜无码片在线观看网站 | 国产精品99久久久久久www | 国产黄片三级视频 | 性欧美69| 国产91长腿美女在线观看 | 欧美高清视频一区 | 九九免费久久这里有精品23 | 国产精品成人精品久久久一区 | 人人超人人超碰超国产 | 国产成人无码午夜视频在线观看 | 日本特级淫片免费看 | 久久成人精品国产亚洲v蝌蚪 | 色婷婷久 | 国产av无码专区 | 国产av永久无码天堂影院 | 欧美日本精品一区二区三区 | 日韩中文无 | 欧美一级乱理片免费观看 | 中文字幕精品无码一区二区 | 亚洲线精品一区二区三区 | 成人区人妻精品 | 99久久精品免费观看区一 | 亚洲精品秘一区二区三区 | 国产精品美女久久久久久2025 | 无码高潮爽到爆 | 国产成人午夜福利免费无码r | 91传媒在线超清免费在线观看 | 国产中文欧美日韩在线观看 | 丰满人妻一区二区三区53视频 | 国产精久久一区二区三区 | 欧美一区二区三区视频在线 | 国产精品妇| 三区综合视频 | 国产精品va在线观看无码 | 99久久人妻无码精品系列蜜桃 | 国产成人女人视频在线观看 | 国产无遮挡无码视频免费软件 | 国产成人精品久久久久 | 亚洲av无码专区在线观看亚 | 亚洲一级毛片免观看 | 国内免费久 | 国产在线高潮流 | 国产午夜精品久久久久婷 | 中文午夜人妻无码看片 | 日韩高清国产一区在线 | 国产一区日韩精品欧美在线 | 苍井空亚洲精品aa片在线播放 | 中文字幕无码免费不卡视频 | 国产精品日韩精品国产a | 国产在线精品一区二区 | 波多野结衣乳喷高潮视频 | 怡春院国产精品视频 | 黄色成人在线播放 | 亚洲av无码 | 国产精品色欲av蜜臂在线观看 | 午夜av福利一区二区三区内射 | 免费一级毛片在线播放 | 国产主播一区二区三区在线观看 | 99精品久 | 国产午夜无码专区喷水 | 99久久婷婷国产综合亚洲 | 91精品国产成人在线 | 国产午夜理论片不卡在线观看 | 91精品国产免费久久国语蜜臀 | 国产不卡福利片在线观看浪潮 | 精品国产一区二区三区19 | 国产精品综合日韩精品第一页 | 国产成人精欧 | 午夜成人理论无码电影在线播放 | 99在线观看视频免费精品9 | 日韩高清伦理片中字在线观 | 中文字幕一区二区三区在线不卡 | 性色av一二三天美传媒 | 国产91精彩视频 | 国产99久久久国产精品免费看 | 亚洲av无码一区二区三区在线高 | 成人蕾丝电影在线播放网站 | 日韩美女色高清在线看 | 欧美一区二区三区激情 | 欧美精品第欧美第12页 | a级毛片| 日韩版码免费福利视频 | 国产性猛交╳xxx乱大交 | 精品人妻av无码系列 | 亚洲avav天堂av在线网毛片 | 精品少妇人妻av无码专区不卡 | 无码日韩精品一区二区免费 | 极品无码一区二区三区 | 国产秀色在线www免费观看 | 最新国产在线拍揄自揄视频 | 欧美精品成人久久网站 | 亚洲欧美日韩在线观看无 | 国产福利精 | 日韩无码三级 | 久久99视热频国只有精品 | 国产精品国产三级国产转不 | 中文字幕一区二区三区免费看 | 激情影视乱码av | 国产精品激情综合久久 | 国产精品秘麻豆免费版下载 | 少妇被粗大猛进进出出 | 日韩av一区二区精品不卡 | 亚洲精品不卡久久久久久 | 精品国产白嫩美女在线观看 | 成人午夜精品一区二区 | 亚洲国产精品视频 | 亚洲精品第一国产综合精品 | av影院| 无码av免费一区二区三区 | 中文字幕 | 高潮久久精品美女 | 精品一区二区夜色 | 国产v一区二区久久久 | 欧美日韩视 | 亚洲成av人片在一线观看 | 国产在线高潮流 | 国产成人av一区二区三区不卡 | 国产精品真实灌醉女在线播放 | 亚洲鲁起秋霞a | 国产一区日韩精品欧美在线 | 欧美孕妇乳喷奶水在线观 | 亚洲精品中文字幕久久久久 | 中文字幕av无码一区二区三区电 | 欧美熟妇xxxx | 天天拍天天夜 | 99国产精品热久久婷婷 | 国产成人精品久久久久 | 欧美日本综合一区二区三区 | 国产精品一区久久久久久 | 在线亚洲精品福利网 | 高潮在线观看 | 国产成人a∨大片在线 | 国产av无码专区亚汌a√ | 午夜精品视频在线观看 | 在线精品国精品国产尤物 | 日韩精品a√在线 | 丰满少妇夜夜爽爽高潮水 | 91视频国产亚洲精品 | 日韩人妻不卡一区二区三区 | 亚洲男人的天堂aⅴ在线视频 | 好看的av在线不卡 | 色窝窝无码一区二区三区成人网站 | 精品国产乱码久久久 | 欧美日韩国产无线码一区 | 欧美日韩一区二区三区四 | 亚洲欧美国产免费综合视频 | 国产在线一区二区三区四区 | 91成人在线观看 | 国产偷窥熟女高潮精品视频 | 日本一道本不卡免费 | 日韩电影一区二区三区红桃 | 亚洲欧美激情综合第一区 | 在线观看亚洲av无码每日更新 | 人妻被按摩师 | 色噜噜狠狠一区二区三区 | 欧美交性又色又爽又黄麻豆 | 精品三级av在线免费观 | 91精品国产全国免费观看蜜桃 | 欧美午夜精品一区二区蜜桃 | 亚洲av无码天堂在线看 | 国产精品热久久av | 福利姬液液酱:惊人喷水表演 | 91色伦在色在线播放 | 97人洗澡 | 欧美最猛性xxxxxx | 亚洲av中文无码乱人伦在线播放 | 女子口述第一次被按摩师进入身体 | 欧美日本| 99re热国产视频 | 国产成a人片在线观看视频9 | 中文字幕无码系列专区 | 中文字幕一区二区三 | 久久超碰97人人做人人爱 | 日本动漫在中国的传播学研究 | 69精品丰满人妻无码视频a片 | 日本一区二区三区视频在线 | 日本午夜免a费看大片中文4 | 国产精品资源在线播放 | 99久久国产综合精品女同 | 国产乱子伦 | 韩国免费一级a一片在线播放 | 国产一国产一级无码网站 | 亚洲aⅴ天堂av天堂无码不卡 | 中文字幕 | 国产乱子伦在线观看 | 日本xxxx高清色视频在线播放 | 亚洲成av人在 | 亚洲中文字幕网资源站 | 国产高清.av | 婷婷在线观看视频免费播放 | 国产精品不卡一区二区三区 | 日韩人妻一区二区三区蜜桃视频 | 亚洲国产日韩欧美综合字幕 | 亚洲欧美日韩精品综合网 | 亚洲av无码一区二区三区在线观看 | 国产日本在线观看 | 91久久精品 | 区二区三区精品 | a级国产电影在线观看 | 精品一区二区不卡无码av | 国内一区二区 | 日韩精品久久无码人妻中文字幕 | 91亚洲视频在线观看 | 亚洲精品动漫免费二区 | 午夜性色欧美刺激精品 | 国产精品66福利在线观看 | 亚洲av性色在线观看 | 欧美极品少妇 | 四虎欧美在线观看免费 | 欧美极品少妇 | 97欧美中文在线播放专区 | 狠狠操影院 | 欧美亚洲另类偷自拍 | 国产午夜精品久久久久九九电影 | 日韩在线中文高清在线资源 | 亚洲国产成人精品无码区在线观看 | 国产国语三级黄色战线免费观看av | 久久成人精品免费播放 | 午夜三级a三级三点在线观看 | 国内精品 | av免费观看网址 | 成年人免费在线看的惊悚动作片 | 午夜免费免费啪视频观看 | 精品国产一区二 | 国产伦子沙发午休系列资源曝 | 国产精品内| 欧美成人一区二区三区不卡视频 | 亚洲视频在线一区二区三区 | 国产精品婷婷久久久久久 | 亚洲av无码专区国产乱码 | 爆乳无码一区二区在线观看ai | 91精品在线播放视频大全在线观看 | 国产精品无码在线观看 | 99re这里是国产 | 99精品久久精品一区二区 | 国产免费网站看v片在线软件 | 中文av岛国无码免费播放 | 国语精品自产拍在线 | 亚洲精品国产精品国自产 | av中文字幕网站 | 中文字幕精品久久久久久 | 午夜成人app免费观看 | 国产一区二区精品在线观看 | 国产老熟女精品一区免费观看全集 | 亚洲精品乱码久久久久久麻豆 | 日本免费一区二区三区 | 亚洲精品人体大胆特aa级视频 | 91在线品视觉盛宴国产 | 97免费视频在线 | 亚洲日韩天堂一区二区免费 | 久久99精品久久久久国产 | 国产精品亚洲电影久久成人影院 | 国产精品99无码一区二蜜桃 | 国产精品一级免费av |