欧美日韩亚-欧美日韩亚州在线-欧美日韩亚洲-欧美日韩亚洲第一区-欧美日韩亚洲二区在线-欧美日韩亚洲高清精品

金喜正规买球

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
亚洲小说欧美中文在线 | 免费a视频在线观看 | 欧美日韩免 | 亚洲国产第一区二区香蕉 | 最新69成人国产精品视频免费 | 免费级人成大片在线观看 | 国语精品91自产拍在线 | 国产精品亚洲精品日韩已满 | 欧美日韩亚州在线 | 成年福利片在线观看 | 欧美一区在线日韩 | 最近中文字幕完整版免费视 | 亚洲精品国产suv一区 | 性色福利| 国产亚洲精品国产91 | 激情综合在线亚洲五月天 | 国产午夜福利精品一 | 免费观看一级特黄欧 | 成·人午夜在线观看 | 免费观看国产精品视频vv | 国产又粗又黄又爽的免费视频 | 精品日韩视频一区二区三 | 自拍偷自拍亚洲精品偷一 | 国产综合色产在线视 | 字幕一区精品自拍 | 国产精品污www在线观看 | 酷客影院 | 成人国产精品日本在线 | 日本韩国欧美午夜 | 舔射插啊~在线观 | 国产又猛又黄又爽在线视频无 | 国产又黄又爽视频免费观 | 国产精品天干天干在线综合 | 陌陌影视在线观看高清完整版 | 精品系列一区二区三区 | 亚洲精品伦理一区二区三区青春 | 欧美精品自拍一区 | 青青在线观看国产大片 | 国产免费永久在线观 | 国产精品一卡二卡三卡四卡 | 国产精品日本一区二区在线播 | 成人中文字幕在线 | 亚洲一线产区二线产区精华 | 欧美日产欧美日产精品 | 中日欧洲精品视频在线 | 中文字幕乱码高清免费网站 | 国产精品亚洲一区二区在线观看 | 成人精品一区二区三区在线 | 午夜国产精品电影在线观看一区 | 日韩在线国产 | 日产国产一区二区 | 国产一级淫片视频免费看 | 国产精品乱码高清在线 | 国产精品亚洲一区 | 中文在线欧美亚洲制服 | 国产日产欧产美韩 | 欧美亚洲欧美日韩中文二区 | 日日摸夜夜添夜夜添特色大片 | 视频一区二区三区 | 国产夜色精品视频伊甸园 | 成人影院在线免费观看 | bt自拍另类综合欧美 | 国产精品第 | 日韩理论片 | 国产午夜亚洲精品不卡在线观看 | 国产一区二区在免费观看 | 99re热这里只有精品视频 | 好看的电视| 国产午夜福利电影免费在线观看 | 女人18毛多水多 | 久99久热只有精品国产15 | 在线观看日韩欧美一区二区 | 国产综合精品一区二区三区 | 国产精选在线视频 | 免费国产va在 | 国产主播专区 | 国产欧美日韩一 | 无人在线视频高清免费观看 | 欧美综合图区亚洲综自拍 | 亚洲欧美色国产综合 | 日本一区二区在线观看精品 | 亚洲午夜一区二区三区在线观看 | 亚洲中文字幕精品第三区 | 精品亚洲欧美日韩 | 国产98视频在线 | 欧美国产在线看 | 91精品国产自产在线观永久 | 青青视频免 | 日本亚洲欧美综合视频 | 97人人揉人人捏人人添电影 | 不卡中文字幕激情视频网站 | 第一页欧日韩在线视频 | 亚洲欧美自 | 津渝完整视频线上观看 | 久9久9精品视频在 | 欧美日韩一道免费中文字幕新视频 | 朝鲜女人大白屁股ass孕交 | 日本高清在 | 亚洲国产欧美日韩另类 | 日产乱码二卡三卡四在线 | 成人免看一级a一片黄 | 护士在办公室被躁bd在线观看 | 国产精品日韩欧美在线 | 日韩精品免费在线观看 | 国产午夜鲁丝片a | 国产精品高清免费网站电影 | 噼里啪啦 | 日韩一级香蕉片在线观看 | 色琪琪原网站亚洲香蕉 | 国产高清尿小便嘘嘘视频 | 露脸美女另类 | 青青在线视频 | 银杏影院 | 国产一区二区三区免费大片天美 | 亚洲精品一区二区三区人妖 | 国产一区二区三区视频精品 | 国产日本欧美 | 欧美性爱免费网站 | 99精品成人高清在线观看 | 国产免费爽爽视频 | 欧美综合视频在线 | 成人污污污w| 一级国产片在线 | 不用播放器的a网站 | 4日本国产vps私人大片 | 正在播放国产精品 | 国产精品午夜小视频观看 | 黄三级高清在线播放 | 亚洲一区二区三区高清在线播放 | 精品一区二区三区密臀在线 | 找老女人泻火 | 国产日产一区二 | 午夜亚洲国产理论片秋霞 | 国产喷水大秀在线观看2025 | 国产精品综合色区在线观看 | 亚洲成aⅴ人片久青草影院 国产91精品系列在线观看 | 91社影院在线观看 | 欧美性受一区二区三区 | 亚洲中文字幕无线 | 国产在线观看第二十三页 | 日韩欧美一本书道一区二区 | 国产乱伦视频 | 亚洲精品第一国产综合精品 | 亚洲97i蜜桃网 | 亚洲精品永久一区 | 999任你躁在线精品免费 | 欧美日韩日处女黑人 | 国产精品日韩欧美在线 | 韩国三级高清手机在线版 | 亚洲欧美精品福利一区二区 | 国产亚洲欧洲精品一区二区三区 | 精品含羞草免费视频观看 | 国产欧美日韩综合精品一区二区三 | 国产高清欧美情侣视频 | 欧美亚洲高清国产一区二区三区 | 日本中文字幕精 | 中文字幕日韩精品一区二区三区 | 国产中文字幕永久 | 色老成人精 | 日韩欧美精品在线观看视频 | 一区二区免费在线观 | 国产国产精品人在线视 | 亚洲欧美激情在线一区 | 精品国产中文字幕 | 国产亚洲精品国产福利 | 国产精品va在线观看 | 视频一区二区三区在线 | 亚洲国产妇在线观看 | 日本高清免费aaaaa大片视频 | 中文字幕亚洲不卡在线亚瑟 | 另类国产亚洲日韩 | 国产亚洲欧美日韩高清专区 | 免费一级欧美片在线观看欧美 | 欧美国产一区二区三区精品 | 精品熟女乱伦一区二区三 | 国产乱码精品一区二区三区香蕉 | 欧美激情区二区一区三 | 2025欧美日韩 | 日本特大a级猛片在线观看 国精产品999国精产 | 性欧美高清 | 91成人影院在线观看 | 欧美一区日韩一区中文字幕页 | 国产精品亚洲一区二区三区欲 | 中文字幕无吗热视频 | 1024国产| 日韩精品视 | 日本成人大片一区二区 | 日本二区 | 欧美乱妇高清免费96欧美乱妇高 | 自拍偷拍 | 欧洲一级大黄大 | 亚洲日本aⅴ片在线观看香蕉 | 欧洲多尺码3538 | 日本永久免费aⅴ在线观看 噼里啪啦hd免费观看动漫 | 欧美日韩亚州在线 | 国产精品亚洲精品一区二区三区 | 国产伦精品一区二区三区视频金莲 | 两性色午夜视频免费老司机 | 欧美日韩国产剧情 | 国产精品人一成在线观看 | 一区二区日韩国产精品 | 欧美日韩精品系列一区二区三区 | 夜鲁鲁鲁夜夜综合视频欧美 | 99热在线免费| 日韩国产免费一区二区三区 | 国产亚洲欧美日韩精品一区二区 | 热门好看动漫 | 国产精品一区在线免费观看 | 日本中文字 | 日韩在线观看视频免费 | 国产一区二区在线 | 三级三级三级a级全黄三 | 亚洲精品国产自在现线最新 | 片在线播放 | 亚洲欧美综合中文 | 亚洲欧美中文 | 在线观看中文最近最新观看 | 亚洲专区欧美三级 | 欧美伊人影院 | 亚洲国产一区二区午夜福利 | 精品乱码一区二区三四区视频 | 经典影片免费在线观看 | 亚洲欧洲中文字 | 精品人成在线电影 | 新91网页版 | 国产精品日韩一区 | 国产精品一卡二卡三卡 | 日本免费在线观看视频 | 开拓亚洲色偷偷偷综合网的同时 | 中文字幕一区日韩精品 | 亚洲欧美日本v | 中文字幕日韩欧免费视频 | 亚洲综合v在线在 | 欧美另类69xxxxx在线观看 | 国产mv在线天 | 影视大全电视剧在线播放 | 添bbb免费看高清视频 | 国产伦精品一区二区三区免 | 在线观看网站人成亚洲小说 | 美女aⅴ高清电影在线观看 国产一区二区三区免费在线 | 午夜淫片 | 精品亚洲一区二区在线播放 | 女视频精品免 | 日韩欧美一区二区三区免费观看 | 快乐加倍! | 欧美性色aⅴ欧美综合色 | 亚洲国产一区在线观看视频 | 国产精品亚洲一区二区三区 | 日韩在线观看不卡 | 欧美精品制服 | 日本伦理电影免费观看 | 亚洲精品伦理一区二区三区青春 | 护士精品一区二区三区 | 日本aⅴ中文免费观看 | 国产又黄又大又粗又硬又猛樱花 | 乱仑图片| 国产综合精品一区二区三区 | 国产精品亚洲日韩au在线 | 午夜在线视频91精品 | 国产亚洲一区二区三区在线 | 日韩欧美亚洲国产永久在线观看 | 中日韩产精品1卡二卡三卡 亚洲中文字幕乱碼在线观看 | 精品国产欧美在线小说区 | 日本亚洲黑人在线播放 | 2025中文字幕在线观看 | 少女的第一的视频 | 91国在线精品国内播放 | 欧美激情a∨在线视频播放 欧美午夜视频网站在线观看 | 国产一区二区高清 | 8x8ⅹ国产精品 | 韩国高清乱理伦片中文字幕 | 国自产精品手机在线观看视 | 91豆奶视频 | 一二区视频免费在线观看 | 欧美动作大片在线观看 | 大香区一二三四区2025 | 国产精品自在在线午夜免费 | 亚洲欧洲一区 | 国产福利深夜视频在线观看 | 精品视频二区 | 人人看人人拍国产精品 | 国产精品亚洲精品日韩已满 | 看黑人巨大精品欧美一区 | 亚洲精品一品区二品区三区 | 国产精品成年片在线观看 | 精品亚洲视频在线观看 | 日本高清一级婬片a级中文字幕 | 亚洲精品一区二区三区人妖 | 日韩一进一 | 国产欧美日本亚洲精品一5区 | 神马影院午夜电影 | 国产精品yy | 综合乱伦自拍三 | 亚洲日韩中文在线精品第一 | 性xxxx欧美老妇胖老太性多毛 | 国产精品女同一区二区在线 | 香蕉影院在线观看 | 亚洲欧美一区二区三区 | 精品国产sm最大网站 | 国产精品视频视 | 亚洲国产一区二区三区在线 | 好男人好资源神马在线 | 国产精品黄在线观看免费网站 | 欧美一区在线日韩 | 激情深爱五月开心婷婷综合 | 国产资源中文字幕 | 国产99综合精品一区二区 | 国产午夜男女爽爽爽爽爽视频 | xxxx迷奷在线观看 | 欧美一区二区三区视频在线观看 | 国产午夜激情视频 | 丝袜亚洲精品中文字幕二区 | 欧美极品 | 夭天干天天 | 成人开心网| 欧美日韩日本中国高清视频在线 | 九九热视频免费在线观看 | 极品美女在线观看国产一区 | 日本欧美一区二区 | 五月婷婷爱六月久 | 国产亚洲人成 | 亚洲天堂国产视频 | а√最新版天堂资源在线 | 国产+亚洲+制服 | 日韩欧美亚洲每日更新在线观看 | 日韩欧美国产精 | 搡8o老女人老妇人老熟 | 婷婷综合尤物精品国产 | 五十路熟女久 | 精品一区二区三区视频免费 | 亚洲欧美精品一区二区三区四区 | 精品国产免费1区 | 久产久精九国品在线 | 免费观看又黄又硬又爽的视频 | 国产高清亚洲精品视bt天堂频 | 国产亚洲福利日本一区二区 | 中文免费高清特 | 九一国产精品视频 | 欧美大片在线观看免费视频 | 999电影网| 日韩精品欧美激情亚洲综合 | 2025最新国产在线不卡a | 国产中文字幕玖玖观看互动交流 | 午夜电影网首页 | 性欧美乱妇高清come | 国产在线观看免费永久 | 中文在线а天堂中文在线新版 | 亚洲欧美手机在线观看 | 国产一码二码三码区别 | 国产精品亚洲午夜一区二区三区 | 最近中文字幕免费高清mv视频6 | 免费h网站| 国产精品不卡片视频免费观 | 国产黄在线观看免费视频45分钟 | 国产精品自在自线国产午夜 | 日本精品大乳一区 | 日韩天天精品综合 | 欧美日韩国产亚洲一区二区 | 最近中文字幕视频高清 | 日韩精品中文字幕高清在线 | 国产又黄的a级鬼片在线观看 | 亚洲欧美另类在线一区 | 中文字幕亚洲精品资源网 | 美女午夜剧场 | 日本高清三区 | 国内精品视频一区二区在线观看 | a级国产乱理伦片在线观看 天美传媒官方网站 | 二三区成人影片 | 国产又粗又猛又爽又黄的视频七张 | 国产亚洲人成网站在线观看 | 国产精品小电影 | 熟女视频一区二区在线观看 | 亚洲欧美日韩不卡在线观看 | 自拍偷自拍亚洲精品偷一 | 亚洲成a人片在线观看网站 亚洲第一综合天堂另类专 91成人小视频 | 在线视频色一区二区三区四区 | 国产精品部在 | 91免费国产在线观看尤物 | 亚洲欧美手机在线观看 | 视频观看免费国产最新 | 欧美综合精品久 | 亚洲一区二区三区不卡视频 | 一级在线免费观看 | 欧美日韩亚州在线 | 亚洲欧洲精品视频 | 国产日韩在线视看高清视频手机 | 精品国偷自产 | 激情中文一区二区三区四区 | 国产精品+日韩精品+在 | 99在线观看| 久青青视频在线观看久 | 成人国产亚洲精品a区天堂 激情五月天深爱网 | 国产又黄| 国产亚洲午夜高清国产拍精品 | 99re6国产精品视频播放 | 国产啪精品视频网站免费尤物 | 国产精品欧美一区二区三区不 | 国产精品偷伦费 | 天天天天躁天天爱天天碰2025 | 老司机深夜免费福利 | 欧美日韩精品一区二区在线播放 | 日本一区二区免费在线播放 | 精品videossex国产 | 亚洲欧美日韩在线 | 亚洲国产精品第一区二区三区 | 精品一区二区中文字幕 | 日韩美女永久网址在线观看 | 免费v片在线观看 | 中文字幕日本精品一区二区三区 | 日本岛国在线观看网址 | 国产欧美日韩综合精品一区二区 | 大地资源在线观看免费中文版 | 欧美日韩国产一区二区 | 国产欧美一区二区综合 | 欧美日韩亚| 免费播放婬乱男女婬视频国 | 国产女人抽搐喷浆视频 | 精品国产一区二区三区四 | 国产天堂在线丝袜一区 | 日韩成人精品无v国产 | 亚洲制服丝袜在线 | 顶级欧美妇高清xxxxx | 国产女人喷潮视频免费 | 私人影视| 国产精品美女一区二区三区 | 中文字幕一冢本 | 国精品一区二区三区免费观看 | 在线观看国产人视频免费中国 | 最近中文字幕免费高清mv视 | 性生生活12分钟免费 | 亚洲免费公开视频在线观看 | 国产一区二区高清在线国产综合 | 污污污污污免费网站在线观看 | 亚洲色精品三区二区一区 | 国产精品v欧美精品∨日韩 女の乳搾りです在线观看 精品不卡一区二区 | 亚洲一区二区三区在线观看播放 | 国产短视频精品区第一页 | 伦视频中文字幕亚洲天堂网 | 亚洲一区二区三区丝袜 | 亚洲国产精品va在线观看香蕉 | 大地影院mv在线观看视频免费 | 精品国产一区二区三区不卡在 | 国精品99久9在线 | 一扒二脱三插片在 | 一区二区三区四区在线不卡高清 | 日韩一级香蕉片在线观看 | 欧美日韩中文在线 | 日韩欧美亚洲一区二区在线观看 | 国产亚洲精aa在线观看不卡 | 成人日韩在线视频观看 | 亚洲日韩中文在线精品第一 | 制服丝袜亚洲中文综合 | 高圆圆又紧又大又湿又爽 | 国产绿奴视频在线观看 | 精品91自产拍在线观看 | 国产极品精频在线观看 | 污污污污污污www网 午夜福利小视频400 | 亚洲精品中文字幕不卡在线 | 亚洲性人人天天夜夜摸 | j8又粗又大又长又爽又硬电影 | 精品国产污污免费网站aⅴ 国产自在自线精品午夜视频 | 国产一区二区高清在线 | 手机看片国产欧美日韩 | 亚洲自拍偷拍精品第二页 | 日本高清视频网站www | 乱码一线二线三线新区破解欧 | 亚洲精品v天堂 | 国产亚洲免视频在线观看 | 亚洲网站在线观看人成 | 最近高清中文在线字幕在线观看 | a级国产乱理 | 精品国产99国产精偷国产黄在线 | 国产91精品在线 | 99爱精品视频 | 日本电影中文字幕 | 国产精品爽爽ⅴa在线观看 欧美精品一区二区三区免费 | 精品不卡一区二区 | 国产激情一区二区三区 | 国产精品自在线拍国 | 日本伊人网在线观看 | 国产精品第三页 | 国产夜夜爽 | 欧美亚洲日本国产黑白配 一级特黄高清aaa | 欧美激合综图片区小说 | 国产日韩免费视频在线观看 | 国产一级高清在线 | 精品免费看国产一区二区 | 午夜性刺激 | 国产一区二区三区精品专区 | 2025自拍偷区亚洲综合第一页 | 在线亚洲高清揄拍自拍一品区 | 日本永久免费aⅴ在线观看 噼里啪啦hd免费观看动漫 | 91天堂а8天堂资源在线官网 | 日本二区在线中文字幕 | 欧美乱大 | 九九热视频在线免费观看 | 国产手机在线观看视频 | 亚洲一区二区三区香蕉下载 | 成人免费一区二区三区视频 | 欧美日韩国产亚洲一区二区 | 91免费在线观看 | 国产尤物在线视精品在亚洲 | 国产夜色精品视频伊甸园 | 精品国产日韩一区三区 | 电视剧免费在线 | 亚洲精品一区二区三区四区五区 | 国产欧美日韩精 | 最新欧美精品一区二区三区不卡 | 好看的最新的国产 | 国产在线精品国自产在线 | 欧美日韩国产在 | 论理电影 | 国产在线视频 | 免费人成在线观看网站体验站 | 欧美日韩精品中文字幕 | 国产福利一区二区精品秒拍 | 国产一区二区精品尤物 | 欧美精品视频在线观看 | 日本在线中文字幕第一视频 | 免费人成再在线观看视频 | 在线免费观看成年人视频 | 日韩高清国产一区在线 | 视频在线华人精品草 | 中文有码在线视 | 亚洲精品高清在线观看 | 国产精品精品国内自产拍 | 亚洲色www成| 2025午夜小电影回乭 | 国产精品女同一区二区在线 | 欧美激情拍拍拍 | 国产视频第一页bt天堂 | 大地资源中文在线观看官网第二页 | 精品一区二区三区的国产在线观 | 欧美三级视频 | 第一福利精品500在线导航 | 国产区综合 | 亚洲日本一线产区和二线产 | 在线中文字幕不卡视频 | 在线观看一二三四区 | 视频一区视频二区日韩专区 | 91精品国产自产老师啪 | 亚洲欧美人成综合在线最新 | 亚洲国产国语自产精品 | 国产精品黑人一区二区三区 | 免费国产老师高 | 视频免费1区二区三区 | 91人成在线观看网站 | 国产欧美精品区一 | 1卡2卡三卡4卡免费日韩乱码 | 国产激情在线视频 | www.亚洲最大夜色伊人 | 五月婷婷综合在线视频 | 五月天激情四射网 | 日本一区二区三区四区公司 | 日韩欧美精品一区二区三区在线 | 91中文字幕| 星空视频影视 | 91九色老熟女免费 | 亚洲综合另类第一页 | 欧美激情000ⅹxx同性 | 国产精品一一在线观看 | 污污视频在线免费观看 | 色一情一乱一伦一区二区 | 欧美日韩中文字幕免费看 | 国产一区二区三区乱码福利 | 国产又大又粗又黄又爽的视 | 亚洲一区| 欧美高清性色生活片免费观 | 国产精品影院 | 国内20| 欧美精品午夜一二三区 | 高清免费视频一区二区三区 | 又爽又大又光又色的午夜视频 | 最新电影免费在线观看 | 国产一区二区三区精品观看啪 | 国产1024香蕉| 欧美亚洲国产清纯综合图区 | 在线免费观看 | 亚洲日韩精品国产一区二区三区 | 欧美日韩在线观看区一二 | 午夜电影免费在线观看 | 91进入蜜 | 看全色黄大色黄大片女爽一黄 | 国产精品视频免费一 | 三区四区五区高 | 欧美性一级中文字幕18页 | 国产色精品vr一区二区 | 亚洲中文字幕高清有码在线 | 国产精品一区一区 | 午夜免费福| 国产自拍偷拍在线一区二区 | 国产专区视频在线观看 | 七十路熟女交尾hd | 精品视频在线观看免费观看 | 欧美极品欧美精品欧美 | 写真福利理论片在线播放 | 中文字幕不卡免费高清视频 | 国产高清美女主播在线观看 | 在线日韩日本国 | 亚洲一级影院 | 强伦轩一区二区三区四区播放方式 | 午夜日韩丝袜美女视频网站 | 尽享高清电影和精彩影视剧 | 香蕉在线播放 | 日韩精品视频欧美国产 | 欧亚乱色熟一区二区三四区 | 青青河边草免费高清电影 | 中国免费高清视频在线观看 | 国产免费直播在线观看视频 | 国产国语老龄妇女 | 亚洲欧美日韩国产综合在线看片 | 国产网站免费精品网站 | 青青草原国产在 | 搡女人真爽免费视频大全 | 青青草免费国产视频网站 | 黑人巨大精品欧美一区二区一 | 精品视频在线 | 国产精品多p对白交换绿 | 碰夜夜澡日日澡 | 国产伦精品一区二区三区视频金莲 | 色色影院官网 | 亚洲人人夜夜 | 日本电影中文字幕 | 色午夜日本高清视频www | 午夜一区二区三区在线 | 国产精品青青青高清在线 | 自拍偷自拍亚洲 | 草莓视频在线免费看 | 日本亲子乱子伦xxxx50路 | 国产精品天天天天影视 | 高清一区二区三区视 | 最近中文字幕在线中文高清版 | a亚洲欧美中文日韩在线v日本 | 国产欧美精品一区二区三区 | 日本免费不卡高清网站 | 欧美国产日韩在线播放成人 | 银娇在线观看 | 欧美xxx | 欧美一区二区三区四区国产另类 | 日韩高清| 真实国产日韩欧美全部综合视频 | 一区二区三区欧美 | 91tv在线播放 | 国产精品自拍激情性爱 | 91探花国产综合在线精品 | 精品欧美小视频在线观看 | 欧美性爱150p| 日本综合欧美一区二区三区 | 国产精品三级在线播放 | 女女同性一 | 欧美大肥婆大肥bbbbb | 丝袜国产精品亚洲 | 欧美日韩国产高清 | 亚洲人妖女同在线播放 | 国产熟女熟女 | 国产精品1024永久免费中国 | www.妞干网.com | 日韩亚洲成a人片在线观看 国产日产成人免费视频在线观看 | 97国产在线看片免费人成视频 | 国产日韩免费视频在线观看 | 成年网站免费视 | 少女的第一的视频 | 最新精品在线视频 | 无人区一码二码三码区别 | 亚洲精品高清在线观看 | 午夜片神马影院福利 | 国产综合视频在线观看8 | 亚洲欧美极品 | 日本欧美一区二区三区乱码 | 亚洲精品456在线播放 | 五月天激情综合网 | 韩国床戏激情戏裸戏 | 国产午夜精华2025在线 | 国产99视频精品免费观看9 | 精品欧乱仑在线 | 日韩精品一区二区三区在线 | 日韩精品一区二区三区免费视频 | 视频国产精品丝袜第一页 | 国产日产中文在线观看 | 免费人成视频年轻人在线无毒不卡 | 野花社区视频在线观看 | 免费亚洲网站 | 国产秘精品入口免费软件 | 97国产一区二 | 国产综合精品一区 | 午夜欧美视频在线 | 三年片大全在线观看免费观看大全 | 九七九七色伦在线影院 | 日本精品欧美一区二区三区 | 日本韩国偷拍视频对白不卡高清精 | 亚洲欧美中文日韩v在线观看 | 精品一区二区三卡四卡网站 | 一区二区三区在线观看 | 国产精品三级在线观看 | 99热在线都是精品 | 最新韩剧推荐 | 日韩成人中文字幕在线观看 | 国产小视频免费在线观看 | 午夜三级中文在线观看 | 热门电视剧 | 国产精品福利在线观看免费 | 国产aⅴ精品一区二区三区 国产91精品一 | 国产一级a毛一级a看免费视频 | 一二三四视频 | 国产高清日本综合 | 口国产自 | 97影视首页 | 中文字幕v亚洲ⅴv天堂 | 国产欧美一区二区三区精品 | 三年在线观看免费大全 | 日本黄页网站免费观看 | 尤物国产精品福利三区 | 国产精品成熟老女人视频 | 日韩一区在线播放 | 欧美乱妇高清无乱码 | 日韩中文字幕精品视频在线 | 国产精品亚洲日日摸夜夜添 | 国产大片b站免费观看推荐 国产91尤物在线观看互 | 欧美性爱精品一级大片 | 国产精品va在线观 | 国产中文字幕在线点播 | 国产中文字幕免费 | 国产宅男宅女在线观看 | 96在线视频精品 | 娇小xxxxx性 在线不卡视频 | 日韩欧美精品一区二区三区在线 | 亚洲天堂网一区二区三区四区 | 一级做a | 国产一级a爱片免费看 | 区在线观看 | 窝窝午夜看片 | 中文字幕亚洲不卡在线亚瑟 | 国产精品视频一区二区三区不卡 | 最好看的中文字幕国语电影 | 男人的天堂a | 欧美亚洲日本中文字幕在线 | 国产小视频在线播放 | 99精品| 精品一区二区三区夜夜嗨 | 亚洲午夜福利在线视频 | 一区一区三区产品乱码 | 国产素人视频在线播放 | 亚洲色精品vr一区二区三区 | 日本亲子乱在线播放 | 国产精品v亚洲精品v日韩精品 | 国产欧美自拍偷怕日韩亚洲 | 成人精品日本亚洲电影院电影 | 国产午夜三级一区二区三 | 国产精品欧 | 丝袜美腿女邻居人 | 亚洲欧美日韩国产精选在线观看 | 国内精品自线一区二区三区 | 亚洲日本韩国 | 国产vr精品专区 | 一级特黄高清aaaa大片 | 国产超级 | 欧美性白人极品hd | 国产又湿又 | 好看的电影电视剧大全 | 国产精品视频一区二区三区四区 | 国产专区91 | 国产又黄又大又粗的视频 | 精品露脸 | 加勒比综合免费不卡在线观看 | 在线成人国产公开视 | 精品国产aⅴ一区二区三区四川人 | 99视频经典在线观看的 | 国产一级特黄aa大片免费 | 成人午夜一区二区三区视频 | 黑人巨大精品欧 | 97久视频精品视频在线老司机 | 亚洲韩国日本 | 美女视频黄频a | 国产一级二级三级经典在线 | 星辰影视大全免费版官网 | 欧美在线播放成人a | 一区二区三区视频免费 | 亚洲综合偷拍一区二区三 | 人人添人人 | 国产国产精品人在线观看 | 国产日韩欧美激情视频不卡 | 国内精品一区二区三区在线观看 | 国产福利小视 | 专区网站 | 亚洲日本va | 美女午夜视频福利 | 免费观看亚洲 | 国产日韩欧美激情视频不卡 | 天美麻花星空视 | 国产一区二区亚洲一区二区 | 亚洲欧美日韩另类中文字幕组 | 国产欧美日韩精品综合在线 | 久青草久青草视频在线观看 | 成年人在线观看视频网站 | 精品外国呦系列在线观看 | 国产精品66福利在线观看 | 国产欧美一二三区男女交配 | 国产毛多女人精品视频影院 | 亚洲人成色777777精品 |