老司机夜插-理伦理片-理伦片免费-理伦片免费观看-理伦片免费看-理伦日韩-理论福利片-理论片第一页-理论片电影-理论片理论

金喜正规买球

logo DevExpress WinForm中文手冊

標準DevExpress服務


立即下載DevExpress WinForms

DevExpress Services將ViewModel中的命令傳遞給View中的控件,這允許您在不分離應用層的情況下修改UI。

可用服務
  • MessageBoxService
  • DialogService
  • Current Dialog Service
  • CurrentWindowService
  • Window Service
  • DocumentManagerService
  • WindowedDocumentManagerService
  • NavigationService
  • DispatcherService
  • Notification Service
  • SplashScreen Service
  • Open and Save File Dialog Services
  • Folder Browser Dialog Service
附加信息
  • 如何使用服務
  • 如何使用服務擴展方法

如何使用服務

1.注冊服務。

  • 本地注冊(服務僅在視圖中可用):調用mvvmContext1.RegisterService方法并將 Service 的Create方法之一作為參數傳遞。DevExpress MVVM 框架自動注冊最常用的服務——請參閱下面“全局注冊”部分中的注釋。
  • 全局注冊(服務可用于整個應用程序):調用相應的靜態MVVMContext.Register…服務方法。
  1. 定義一個ViewModel屬性,返回一個相關Service接口的對象(例如,如果注冊了WindowedDocumentManagerService,您的屬性應該是IDocumentManagerService類型)。
  2. 使用此屬性可訪問服務并調用服務方法向視圖發送命令。

示例

C#:

//1. Global registration
MVVMContext.RegisterMessageBoxService();
//1. Local registration
mvvmContext1.RegisterService(CreateXtraMessageBoxService());

//2. POCO ViewModel property that returns a Service
protected virtual IMessageBoxService MessageBoxService {
get { throw new System.NotImplementedException(); }
}

//3. Send a Service command to a View
public void SayHello() {
MessageBoxService.Show("Hello!");
}

VB.NET:

'1. Global registration
MVVMContext.RegisterMessageBoxService()
'1. Local registration
mvvmContext1.RegisterService(CreateXtraMessageBoxService())

'2. POCO ViewModel property that returns a Service
protected virtual IMessageBoxService MessageBoxService
Get
Throw New System.NotImplementedException()
End Get

'3. Send a Service command to a View
public void SayHello()
MessageBoxService.Show("Hello!")
MessageBoxService

允許您顯示消息框和彈出框。

接口
  • IMessageBoxService
管理控件
  • System.Windows.Forms.MessageBox
  • XtraMessageBox
  • FlyoutDialog
Global Registration

C#:

MVVMContext.RegisterMessageBoxService();
MVVMContext.RegisterXtraMessageBoxService();
MVVMContext.RegisterFlyoutMessageBoxService();

VB.NET:

MVVMContext.RegisterMessageBoxService()
MVVMContext.RegisterXtraMessageBoxService()
MVVMContext.RegisterFlyoutMessageBoxService()

DevExpress MVVM框架自動調用RegisterXtraMessageBoxService方法。

Local Registration

C#:

mvvmContext1.RegisterService(
//one of "Create" methods from the list below
);

VB.NET:

mvvmContext1.RegisterService(
'one of "Create" methods from the list below
)
Create()方法
  • Create(DefaultMessageBoxServiceType type) ——使用DefaultMessageBoxServiceType枚舉值來確定要創建的服務類型。
  • CreateMessageBoxService() ——創建一個使用標準WinForms消息框的Service。
  • CreateXtraMessageBoxService() ——創建一個使用DevExpress XtraMessageBox對象的Service。
  • CreateFlyoutMessageBoxService() ——創建一個使用FlyoutDialog對象的服務。

 所有四個方法都有對應的重載與第二個IWin32Window所有者參數,此參數允許指定擁有此服務的視圖。如果您傳遞的是null而不是owner參數,框架將嘗試找到一個應該是Service所有者的適當視圖并在大多數情況下使用活動窗口。

Public Service Members
  • ShowMessage ——五個顯示消息框的擴展方法。
  • MessageBoxFormStyle——允許您訪問消息框表單并修改其外觀設置。例如,下面的代碼說明了如何將粗體字體樣式應用于消息框按鈕。

C#:

var msgService = MessageBoxService.CreateFlyoutMessageBoxService();
msgService.MessageBoxFormStyle = (form) => {
{
FlyoutDialog msgFrm = form as FlyoutDialog;
msgFrm.Properties.AppearanceButtons.FontStyleDelta = FontStyle.Bold;
};

VB.NET:

Dim msgService = MessageBoxService.CreateFlyoutMessageBoxService(Me)
msgService.DialogFormStyle = Sub(form)
Dim msgFrm As FlyoutDialog = TryCast(form, FlyoutDialog)
msgFrm.Properties.AppearanceButtons.FontStyleDelta = FontStyle.Bold
End Sub

DialogService

允許您顯示對話框。

接口

IDialogService

管理控件
  • XtraForm
  • FlyoutDialog
  • RibbonForm
Global Registration

C#:

MVVMContext.RegisterXtraDialogService();
MVVMContext.RegisterFlyoutDialogService();
MVVMContext.RegisterRibbonDialogService();

VB.NET:

MVVMContext.RegisterXtraDialogService()
MVVMContext.RegisterFlyoutDialogService()
MVVMContext.RegisterRibbonDialogService()

 DevExpress MVVM框架自動調用RegisterXtraDialogService方法。

Local Registration

C#:

mvvmContext1.RegisterService(DialogService.CreateXtraDialogService(this));
mvvmContext1.RegisterService(DialogService.CreateFlyoutDialogService(this));
mvvmContext1.RegisterService(DialogService.CreateRibbonDialogService(this));
mvvmContext1.RegisterService(DialogService.Create(this, DefaultDialogServiceType.RibbonDialog));

VB.NET:

mvvmContext1.RegisterService(DialogService.CreateXtraDialogService(Me))
mvvmContext1.RegisterService(DialogService.CreateFlyoutDialogService(Me))
mvvmContext1.RegisterService(DialogService.CreateRibbonDialogService(Me))
mvvmContext1.RegisterService(DialogService.Create(Me, DefaultDialogServiceType.RibbonDialog))
Create()方法

 DialogService的所有' Create…'方法都需要一個擁有該服務的視圖。如果傳遞的是null而不是View,框架會嘗試找到一個合適的窗口(在大多數情況下,會使用活動窗口)。

  • Create(IWin32Window owner, DefaultDialogServiceType type) ——使用DefaultDialogServiceType枚舉值來確定要創建的服務類型。
  • CreateXtraDialogService(IWin32Window所有者)——創建一個顯示可剝皮DevExpress對話框的服務。
  • CreateFlyoutDialogService(IWin32Window所有者)——創建一個顯示flyoutdialog的服務。
  • CreateRibbonDialogService(IWin32Windowowner)——創建一個服務,將帶有嵌入式RibbonControl的RibbonForm顯示為對話框,對話框按鈕顯示為功能區項目。
  • Create(IWin32Window owner, string title, Func<IDialogForm> factoryMethod)——允許您注冊一個Service來管理自定義對話框(實現IDialogForm接口的對象)。

C#:

DialogService.Create(ownerView1, "A custom dialog", ()=> new CustomDialogClass());

VB.NET:

DialogService.Create(ownerView1, "A custom dialog", Function() New CustomDialogClass())
  • DialogService Create(IWin32Windowowner, string title, IDialogFormFactoryfactory)——接受創建自定義對話框的工廠類。
Public Service Methods

ShowDialog——六種擴展方法,顯示具有特定外觀和內容的對話框。

C#:

public void FindCustomer() {
if(DialogService.ShowDialog(MessageButton.OKCancel, "Find Customer", findDialogViewModel) == MessageResult.OK) {
// do something
}
}

VB.NET:

Public Sub FindCustomer()
If DialogService.ShowDialog(MessageButton.OKCancel, "Find Customer", findDialogViewModel) = MessageResult.OK Then
' do something
End If
End Sub

 這些重載允許您用自定義UICommand對象替換默認對話框按鈕。為此,使用自定義命令的Id或Tag屬性作為MessageResult或DialogResult值。

C#:

public void FindCustomer() {
var findDialogViewModel = FindDialogViewModel.Create();
findDialogViewModel.SetParentViewModel(this);
var commands = new List<UICommand>
{
// Button with custom command attached
new UICommand {
Id = "Find",
Caption = "Find",
Command = new DelegateCommand(() =>{
// . . . implement the Find command here
}),
IsDefault = true,
IsCancel = false,
Tag = DialogResult.OK
},
// standard button caption customization
new UICommand {
Caption = "Cancel Find",
Tag = DialogResult.Cancel
}
};
DialogService.ShowDialog(commands, "Find Customer", "FindDialogView", SelectedEntity, findDialogViewModel);
}

VB.NET:

Public Sub FindCustomer()
Dim findDialogViewModel = FindDialogViewModel.Create()
findDialogViewModel.SetParentViewModel(Me)
Dim commands = New List(Of UICommand) From {New UICommand With {.Id = "Find", .Caption = "Find", .Command = New DelegateCommand(Sub()
End Sub), .IsDefault = True, .IsCancel = False, .Tag = DialogResult.OK
},
New UICommand With {.Caption = "Cancel Find", .Tag = DialogResult.Cancel}
}
DialogService.ShowDialog(commands, "Find Customer", "FindDialogView", SelectedEntity, findDialogViewModel)
End Sub

 DialogFormStyle——允許您訪問對話框并修改其外觀設置。例如,下面的代碼說明了如何將粗體字體樣式應用于彈出對話框按鈕。

C#:

var service = DialogService.CreateFlyoutDialogService(this);
service.DialogFormStyle = (form) =>
{
FlyoutDialog dialog = form as FlyoutDialog;
dialog.Properties.AppearanceButtons.FontStyleDelta = FontStyle.Bold;
};

VB.NET:

Dim service = DialogService.CreateFlyoutDialogService(Me)
service.DialogFormStyle = Sub(form)
Dim dialog As FlyoutDialog = TryCast(form, FlyoutDialog)
dialog.Properties.AppearanceButtons.FontStyleDelta = FontStyle.Bold
End Sub

當前對話服務

允許您管理當前可見的對話框。

接口

DevExpress.Mvvm.ICurrentDialogService

注冊

服務只有在有活動對話框時才存在——您不能注冊CurrentDialogService。

Create()方法

沒有

Public Service Methods
  • Close()、Close(MessageResultdialogResult)和Close (UICommanddialogResult) —— 使用給定的DialogResult關閉對話框,如果結果是UICommand類型,則調用相關的UICommand 。請注意,您只能使用最初傳遞到該方法中的對話框服務的UICommand之一ShowDialog。
  • WindowState——這個屬性允許您改變對話框的窗口狀態(正常,最小化或最大化)。

當前窗口服務

類似于CurrentDialogService,但是允許您管理當前的應用程序窗口(形式)。

接口

DevExpress.Mvvm.ICurrentWindowService

Global Registration

不可用。

Local Registration

C#:

mvvmContext1.RegisterService(CurrentWindowService.Create(this));
mvvmContext1.RegisterService(CurrentWindowService.Create(listBoxControl1));

VB.NET:

mvvmContext1.RegisterService(CurrentWindowService.Create(Me))
mvvmContext1.RegisterService(CurrentWindowService.Create(listBoxControl1))
Create()方法
  • Create(控制容器)——允許您為任何承載作為方法參數分配的控件的表單注冊服務。
  • 創建(Form currentForm)——為這個表單注冊一個服務。
  • Create(Func<Form> getCurrentForm)——為getCurrentForm方法返回的任何表單注冊一個Service。
公共服務API

 Activate()、Close()、Hide()和Show() ——允許您控制當前窗口的可見性。

WindowState ——此屬性允許您更改窗體的窗口狀態(正常、最小化或最大化)。

窗口服務

允許您將視圖顯示為獨立的窗口(形式),并從ViewModel層管理這些窗口。

接口

IWindowService

管理控件
  • XtraForm
  • RibbonForm
  • FlyoutPanel
Global Registration

C#:

MVVMContext.RegisterXtraFormService();
MVVMContext.RegisterFlyoutWindowService();
MVVMContext.RegisterRibbonWindowService();

VB.NET:

MVVMContext.RegisterXtraFormService()
MVVMContext.RegisterFlyoutWindowService()
MVVMContext.RegisterRibbonWindowService()
Local Registration

C#:

mvvmContext1.RegisterService(WindowService.Create(this, DefaultWindowServiceType.RibbonForm, "Window Title"));
mvvmContext1.RegisterService(WindowService.CreateXtraFormService(this, "Window Title"));
mvvmContext1.RegisterService(WindowService.CreateRibbonWindowService(this, "Window Title"));
mvvmContext1.RegisterService(WindowService.CreateFlyoutWindowService(this, "Window Title"));

VB.NET:

mvvmContext1.RegisterService(WindowService.Create(Me, DefaultWindowServiceType.RibbonForm, "Window Title"))
mvvmContext1.RegisterService(WindowService.CreateXtraFormService(Me, "Window Title"))
mvvmContext1.RegisterService(WindowService.CreateRibbonWindowService(Me, "Window Title"))
mvvmContext1.RegisterService(WindowService.CreateFlyoutWindowService(Me, "Window Title"))
本地注冊(模態窗口)

如果您想把表單顯示為模態對話框請在注冊前修改Service的ShowMode屬性。

C#:

var service = WindowService.CreateXtraFormService(this, "Window Title");
service.ShowMode = WindowService.WindowShowMode.Modal;
mvvmContext1.RegisterService(service);

VB.NET:

Dim service = WindowService.CreateXtraFormService(Me, "Window Title")
service.ShowMode = WindowService.WindowShowMode.Modal
mvvmContext1.RegisterService(service)
Create()方法

 CreateXtraFormService(IWin32Window owner, string title = null)——創建一個管理xtraform的服務。

 CreateRibbonWindowService(IWin32Window owner, string title = null)——創建一個管理Ribbon窗體的服務。

 CreateFlyoutWindowService(IWin32Window owner, string title = null)——創建一個管理Flyouts的服務。

 Create(IWin32Window owner, DefaultWindowServiceType type, string title = null)——創建一個Service,其類型取決于type參數。

 Create(IWin32Window owner, string title = null, Func<IWindow> factoryMethod = null) ——允許注冊一個服務來管理自定義表單(實現IWindowFactory接口的對象)。

 Create(IWin32Window owner, string title = null, IWindowFactory factory = null)——接受一個創建自定義窗口的工廠類。

公共服務方式
  • Show(object viewModel)——顯示與此 ViewModel 關聯的視圖。
  • Show(string documentType, object viewModel)——顯示由目標 ViewModel 管理的特定視圖。
  • Show(string documentType, objectparameter, objectparentViewModel)——允許您將特定參數傳遞到表單。
  • Hide()和Activate()——允許您最小化表單或將其置于最前面。
  • Close()——關閉窗口管理。

DocumentManagerService

提供在MDI(多文檔接口)控件中創建和管理選項卡的方法的本地服務。

接口

IDocumentManagerService

管理控件
  • DocumentManager
  • Navigation Frame
  • XtraTabControl
  • XtraTabbedMdiManager
  • Dock Manager
  • TabFormControl
Global Registration

由于該服務管理特定的內容提供程序,因此您無法全局注冊該服務。

Local Registration

C#:

mvvmContext1.RegisterService(DocumentManagerService.Create(tabbedView1));

VB.NET:

mvvmContext1.RegisterService(DocumentManagerService.Create(tabbedView1))
Create()方法
  • Create(IDocumentAdapterFactory factory)——創建一個控制特定提供者的服務,提供程序是類的控件或對象,派生自IDocumentAdapterFactory接口。factory參數接受以下類型的對象:
  1. 所有
  2. 選項卡MDI管理器
  3. XtraTabControl
  4. 導航框架
  5. Dock Manager
  6. TabFormControl
  • Create(Func<IDocumentAdapter> factoryMethod)——接受一個初始化新工廠對象的factoryMethod函數,這允許您創建自定義工廠(實現IDocumentAdapterFactory接口的對象)。
Global Registration

由于該服務管理特定的內容提供程序,因此您無法全局注冊該服務。

Local Registration

C#:

mvvmContext1.RegisterService(DocumentManagerService.Create(tabbedView1));

VB.NET:

mvvmContext1.RegisterService(DocumentManagerService.Create(tabbedView1))
Create()方法
  • Create(IDocumentAdapterFactory factory)——創建一個控制特定提供者的服務,提供程序是類的控件或對象,派生自IDocumentAdapterFactory接口。factory參數接受以下類型的對象:
  1. 所有DocumentManager視圖
  2. 選項卡MDI管理器
  3. XtraTabControl
  4. 導航框架
  5. Dock Manager
  6. TabFormControl
  • Create(Func<IDocumentAdapter> factoryMethod)——接受一個初始化新工廠對象的factoryMethod函數,這允許您創建自定義工廠(實現IDocumentAdapterFactory接口的對象)。
公共服務方式
  • Documents——提供對托管內容提供者擁有的項(文檔、選項卡、頁面)集合的訪問的屬性。
  • ActiveDocument——獲得或設置一個活躍的項目。
  • CreateDocument——創建該內容提供商擁有的新項目的三種擴展方法。創建的項目的類型取決于提供者類型。對于TabbedView、NativeMdiView視圖和XtraTabbedMdiManager控件,CreateDocument方法創建一個項目,作為選項卡停靠到提供程序。為了創建浮動項,請改用 WindowedDocumentManagerService (見下文)。

窗口文檔管理器服務

 允許您添加承載自定義內容的新表單。如果服務是用Create(IDocumentAdapterFactory factory)方法注冊的,它會添加新的浮動DocumentManager/XtraTabbedMdiManager面板而不是表單。

接口

IDocumentManagerService

管理控件
  • System.Windows.Forms.Form
  • XtraForm
  • RibbonForm
  • FlyoutDialog
Global Registration

C#:

MVVMContext.RegisterFormWindowedDocumentManagerService();
MVVMContext.RegisterXtraFormWindowedDocumentManagerService();
MVVMContext.RegisterRibbonFormWindowedDocumentManagerService();

VB.NET:

MVVMContext.RegisterFormWindowedDocumentManagerService()
MVVMContext.RegisterXtraFormWindowedDocumentManagerService()
MVVMContext.RegisterRibbonFormWindowedDocumentManagerService()

DevExpress MVVM框架自動調用XtraFormWindowedDocumentManagerService方法。

Local Registration

C#:

mvvmContext1.RegisterService(WindowedDocumentManagerService.Create(this));
mvvmContext1.RegisterService(WindowedDocumentManagerService.CreateXtraFormService());
mvvmContext1.RegisterService(WindowedDocumentManagerService.CreateRibbbonFormService());
mvvmContext1.RegisterService(WindowedDocumentManagerService.CreateFlyoutFormService());
mvvmContext1.RegisterService(WindowedDocumentManagerService.Create(this, DefaultWindowedDocumentManagerServiceType.RibbonForm));
mvvmContext1.RegisterService(WindowedDocumentManagerService.Create(tabbedView1));

VB.NET:

mvvmContext1.RegisterService(WindowedDocumentManagerService.Create(Me))
mvvmContext1.RegisterService(WindowedDocumentManagerService.CreateXtraFormService())
mvvmContext1.RegisterService(WindowedDocumentManagerService.CreateRibbbonFormService())
mvvmContext1.RegisterService(WindowedDocumentManagerService.CreateFlyoutFormService())
mvvmContext1.RegisterService(WindowedDocumentManagerService.Create(Me, DefaultWindowedDocumentManagerServiceType.RibbonForm))
mvvmContext1.RegisterService(WindowedDocumentManagerService.Create(tabbedView1))
Create()方法

 如果您傳遞的是null而不是owner參數,框架會嘗試找到一個應該是Service所有者的視圖,在大多數情況下,使用活動窗口。

  • Create(IWin32Window owner)——創建具有特定所有者的默認類型的Service,默認類型是全局注冊的類型。例如,如果您有全局注冊的功能區表單服務(RegisterRibbonFormWindowedDocumentManagerService),本地服務也會顯示功能區表單,如果沒有注冊全局服務,則默認類型為XtraForm。
  • Create(IWin32Window owner, DefaultWindowedDocumentManagerServiceType type)——創建一個具有目標所有者的本地服務,服務類型取決于類型參數。
  • CreateXtraFormService(IWin32Window owner)——注冊一個服務,在XtraForms中托管它的項目。
  • CreateRibbbonFormService(IWin32Window owner) ——注冊一個服務,在RibbonForms中托管它的項目。
  • CreateFlyoutFormService(IWin32Window owner)——注冊一個服務,該服務在彈出對話框中承載其項目。
  • Create(IDocumentAdapterFactory factory) —— 一種擴展方法,允許您為 WindowedDocumentManagerService設置本地內容提供程序,使用此方法注冊的服務將子提供程序項目添加為浮動表單。例如,以下代碼注冊與DocumentManager的TabbedView關聯的服務,當您調用該CreateDocument方法時,服務會將浮動文檔添加到此TabbedView。

C#:

mvvmContext1.RegisterService(WindowedDocumentManagerService.Create(tabbedView1));

VB.NET:

mvvmContext1.RegisterService(WindowedDocumentManagerService.Create(tabbedView1))

 下面的對象實現了IDocumentAdapterFactory接口,并且可以作為參數傳遞給這個方法:

  • DocumentManager組件的TabbedView和NativeMdiView視圖
  • XtraTabbedMdiManager

 XtraTabControl和NavigationFrame子項目總是停靠的,不能將這些控件用作工廠參數。

 Create(Func<Form> factoryMethod, IWin32Window owner) ——允許您創建自定義工廠(實現IDocumentAdapterFactory接口的對象)。

公共服務方式
  • Documents——提供對此服務管理的項集合的訪問的屬性。
  • ActiveDocument——獲取或設置活動項。
  • CreateDocument——創建新項的三個擴展方法,根據注冊的不同,項目是一個獨立的表單/XtraForm/RibbonForm或浮動面板由DocumentManager/XtraTabbedMdiManager擁有。

導航服務

 該服務允許您在NavigationFrame控件中從一個視圖導航到另一個視圖,并將應用程序視圖作為托管控件中的頁面打開(例如,作為TabbedView選項卡)。

接口

INavigationService

管理控件
  • 導航框架
  • DocumentManager
  • XtraTabControl
  • XtraTabbedMdiManager
  • Dock Manager
  • TabFormControl
Global Registration

不可用。

Local Registration

C#:

mvvmContext1.RegisterService(NavigationService.Create(navigationFrame1));

VB.NET:

mvvmContext1.RegisterService(NavigationService.Create(navigationFrame1))
Create()方法

 Create(IDocumentAdapterFactory factory)——允許您為此服務設置本地內容提供者的擴展方法,當使用此方法創建時,服務將創建新項作為提供者的子項。

公共服務方式

與DocumentManagerService中相同的命令可用,加上以下導航API:

  • BackNavigationMode——允許您指定當用戶按下“返回”按鈕時屏幕上出現的模塊:前一個模塊還是根模塊。
  • GoBack, GoForward ——導航到先前查看的模塊或放棄此導航。
  • CanGoBack, CanGoForward ——返回是否可以在給定方向上導航。
  • Navigate ——導航到目標視圖,其名稱作為字符串參數傳遞給此方法。

DispatcherService

允許您使用dispatcher在ViewModel中執行操作。

接口

管理控件

沒有。

Global Registration

此服務已注冊。

Local Registration

C#:

mvvmContext1.RegisterService(DispatcherService.Create());

VB.NET:

mvvmContext1.RegisterService(DispatcherService.Create())
Create()方法
  • Create()——創建一個新的Service實例。
公共服務方式

BeginInvoke——異步執行指定的委托。

C#:

async Task DoSomethingAsync(){
var dispatcher = this.GetService<IDispatcherService>(); // Obtain the UI-thread's dispatcher
// Do something asynchronously
await Task.Delay(100);
await dispatcher.BeginInvoke(()=>{
// Perform an update
// this.RaisePropertiesChanged()
});
}

VB.NET:

Private Async Sub DoSomethingAsync() As Task
Dim dispatcher = Me.GetService(Of IDispatcherService)() 'Obtain the UI-thread's dispatcher
' Do something asynchronously
Await Task.Delay(100)
Await dispatcher.BeginInvoke(Function()
' Perform an update
' Me.RaisePropertiesChanged()
End Function)
End Sub

通知服務

顯示傳統的警報窗口和Windows Toast通知。

接口

INotificationService

管理控件
  • Toast Notification Manager
  • Alert Windows
Global Registration

不可用。

Local Registration

C#:

mvvmContext.RegisterService(NotificationService.Create(toastNotificationManager));

VB.NET:

mvvmContext.RegisterService(NotificationService.Create(toastNotificationManager))
Create()方法
  • Create(INotificationProvider manager)——創建一個使用目標管理器顯示通知的服務,接受ToastNotificationsManager和AlertControl類實例作為參數。
公共服務方式
  • CreatePredefinedNotification(string header, string body, string body2, object image = null)——創建帶有圖像、標題文本字符串和兩個常規正文文本字符串的通知。注意,這個方法創建了一個通知,但沒有顯示它——要使它可見,請調用ShowAsync方法。請參閱下面的代碼片段來獲取示例。

C#:

protected INotificationService INotificationService {
get { return this.GetService<INotificationService>(); }
}

public virtual INotification Notification {
get;
set;
}

public async void ShowNotification() {
// Create a notification with the predefined template.
Notification = INotificationService.CreatePredefinedNotification("Hello", "Have a nice day!", "Greeting");
// Display the created notification asynchronously.
try {
await Notification.ShowAsync();
}
catch(AggregateException e) {
// Handle errors.
MessageBoxService.ShowMessage(e.InnerException.Message, e.Message);
}
}

public void HideNotification() {
// Hide the notification
Notification.Hide();
}

VB.NET:

Protected ReadOnly Property INotificationService() As INotificationService
Get
Return Me.GetService(Of INotificationService)()
End Get
End Property

Public Overridable Property Notification() As INotification

Public Async Sub ShowNotification()
' Create a notification with the predefined template.
Notification = INotificationService.CreatePredefinedNotification("Hello", "Have a nice day!", "Greeting")
' Display the created notification asynchronously.
Try
Await Notification.ShowAsync()
Catch ex As AggregateException
' Handle errors.
MessageBoxService.ShowMessage(ex.InnerException.Message, ex.Message)
End Try
End Sub

Public Sub HideNotification()
' Hide the notification.
Notification.Hide()
End Sub

 如果該ShowAsync方法無法顯示通知(例如,如果 Windows 操作系統設置禁用 toast 通知),則該方法會在非UI線程中異步引發異常,此異常不會影響UI線程。要處理這些異常并響應通知顯示失敗,請ShowAsync使用塊包裝方法的調用try..catch。

  • CreateCustomNotification(object viewModel)——創建一個帶有 ViewModel 的通知,ViewModel 參數需要一個實現DevExpress.Utils.MVVM.Services.INotificationInfo接口的類的實例。該界面公開一張圖像和三個字符串屬性,允許您通知設置圖標、標題文本字符串和兩個常規文本字符串。下面的代碼說明了一個示例。

C#:

public class HelloViewModelWithINotificationInfo : INotificationInfo {
protected INotificationService INotificationService {
get { return this.GetService<INotificationService>(); }
}
public virtual INotification Notification {
get;
set;
}
public void ShowNotification() {
// Creating a custom notification
Notification = INotificationService.CreateCustomNotification(this);
}
string INotificationInfo.Header {
get { return "Hello, buddy!"; }
}
string INotificationInfo.Body {
get { return "Have a nice day!"; }
}
string INotificationInfo.Body2 {
get { return "Greeting"; }
}
System.Drawing.Image INotificationInfo.Image {
get { return null; }
}
}

VB.NET:

Public Class HelloViewModelWithINotificationInfo
Implements INotificationInfo
Protected ReadOnly Property INotificationService() As INotificationService
Get
Return Me.GetService(Of INotificationService)()
End Get
End Property
Public Overridable Property Notification() As INotification
Public Sub ShowNotification()
' Creating a custom notification
Notification = INotificationService.CreateCustomNotification(Me)
End Sub
Private ReadOnly Property INotificationInfo_Header() As String Implements INotificationInfo.Header
Get
Return "Hello, buddy!"
End Get
End Property
Private ReadOnly Property INotificationInfo_Body() As String Implements INotificationInfo.Body
Get
Return "Have a nice day!"
End Get
End Property
Private ReadOnly Property INotificationInfo_Body2() As String Implements INotificationInfo.Body2
Get
Return "Greeting"
End Get
End Property
Private ReadOnly Property INotificationInfo_Image() As System.Drawing.Image Implements INotificationInfo.Image
Get
Return Nothing
End Get
End Property
End Class

 CreateCustomNotification方法創建一個通知,但不顯示它,要顯示通知,調用通知的' show '和' Hide '方法。

啟動畫面服務

此服務允許您顯示啟動屏幕和等待表單,表明應用程序正忙。

接口

管理控件

Splash Screen Manager

Global Registration

此服務已注冊。

Local Registration

C#:

mvvmContext.RegisterService(SplashScreenService.Create(splashScreenManager));

VB.NET:

mvvmContext.RegisterService(SplashScreenService.Create(splashScreenManager))
Create()方法
  • Create(ISplashScreenServiceProvider serviceProvider)——創建一個管理目標啟動屏幕管理器的服務。
  • Create(ISplashScreenServiceProvider serviceProvider, DefaultBoolean throwExceptions) ——創建一個服務,該服務管理目標啟動屏幕管理器,并在發生錯誤時拋出異常。
公共服務方式

ShowSplashScreen(string documentType)—— 顯示啟動屏幕或特定類型的等待表單。“documentType”參數是從SplashScreen類派生的 ViewModel 的名稱,表示需要顯示的啟動屏幕。如果傳遞null作為參數,則會創建由DevExpress設計的默認啟動屏幕。

 要顯示Fluent Splash Screen或Overlay Form,請將相應的字符串 ID 傳遞給該ShowSplashScreen方法。

疊加形式:

C#:

//ViewModel
public class OverlayViewModel {
protected ISplashScreenService SplashScreenService {
get { return this.GetService<ISplashScreenService>(); }
}
public async System.Threading.Tasks.Task Wait() {
SplashScreenService.ShowSplashScreen("#Overlay#");
//do something
await System.Threading.Tasks.Task.Delay(2500);
SplashScreenService.HideSplashScreen();
}
}

//View
mvvmContext.ViewModelType = typeof(OverlayViewModel);
mvvmContext.RegisterService(SplashScreenService.Create(splashScreenManager));
var fluent = mvvmContext.OfType<OverlayViewModel>();
fluent.BindCommand(showButton, x => x.Wait);

VB.NET:

'ViewModel
Public Class OverlayViewModel
Protected ReadOnly Property SplashScreenService() As ISplashScreenService
Get
Return Me.GetService(Of ISplashScreenService)()
End Get
End Property
Public Async Function Wait() As System.Threading.Tasks.Task
SplashScreenService.ShowSplashScreen("#Overlay#")
'do something
Await System.Threading.Tasks.Task.Delay(2500)
SplashScreenService.HideSplashScreen()
End Function
End Class

'View
mvvmContext.ViewModelType = GetType(OverlayViewModel)
mvvmContext.RegisterService(SplashScreenService.Create(splashScreenManager))
Dim fluent = mvvmContext.OfType(Of OverlayViewModel)()
fluent.BindCommand(showButton, Function(x) x.Wait)

流暢的啟動界面:

C#:

//ViewModel
public class FluentSplashScreenViewModel {
protected ISplashScreenService SplashScreenService {
get { return this.GetService<ISplashScreenService>(); }
}
public void Show() {
SplashScreenService.ShowSplashScreen("#FluentSplashScreen#");
}
public void Hide() {
System.Threading.Thread.Sleep(1000);
SplashScreenService.HideSplashScreen();
}
}

//View
mvvmContext.RegisterService(SplashScreenService.Create(splashScreenManager));
var fluent = mvvmContext.OfType<FluentSplashScreenViewModel>();
fluent.BindCommand(showButton, x => x.Show);
fluent.BindCommand(hideButton, x => x.Hide);

VB.NET:

'ViewModel
Public Class FluentSplashScreenViewModel
Protected ReadOnly Property SplashScreenService() As ISplashScreenService
Get
Return Me.GetService(Of ISplashScreenService)()
End Get
End Property
Public Sub Show()
SplashScreenService.ShowSplashScreen("#FluentSplashScreen#")
End Sub
Public Sub Hide()
System.Threading.Thread.Sleep(1000)
SplashScreenService.HideSplashScreen()
End Sub
End Class

'View
mvvmContext.RegisterService(SplashScreenService.Create(splashScreenManager))
Dim fluent = mvvmContext.OfType(Of FluentSplashScreenViewModel)()
fluent.BindCommand(showButton, Function(x) x.Show)
fluent.BindCommand(hideButton, Function(x) x.Hide)
  • HideSplashScreen()——隱藏活動的啟動屏幕或等待表單。
  • SetSplashScreenProgress(double progress, double maxProgress) and SetSplashScreenState(object state) ——將自定義數據注入當前可見的啟動畫面或等待表單的方法,SetSplashScreenProgress方法更新啟動屏幕進度條,SetSplashScreenState發送任何其他類型的數據(例如,啟動屏幕標簽的字符串數據)。
啟動畫面

 啟動畫面可以利用這兩種方法,要接收和使用注入的數據,請使用啟動屏幕管理器的智能標簽菜單添加新的啟動屏幕。啟動屏幕的代碼包含“覆蓋”區域:覆蓋其SplashFormBase.ProcessCommand方法來解析數據。

C#:

public partial class SplashScreen1 : SplashScreen {
public SplashScreen1() {
InitializeComponent();
}
#region Overrides
public override void ProcessCommand(Enum cmd, object arg) {
base.ProcessCommand(cmd, arg);
}
#endregion
}

VB.NET:

Partial Public Class SplashScreen1
Inherits SplashScreen
Public Sub New()
InitializeComponent()
End Sub
#Region "Overrides"
Public Overrides Sub ProcessCommand(ByVal cmd As System.Enum, ByVal arg As Object)
MyBase.ProcessCommand(cmd, arg)
End Sub

#End Region
End Class

 SetSplashScreenProgress 和SetSplashScreenState方法還可以將數據發送到啟動屏幕和等待表單。為此,請使用簡單對象(字符串、數值等)作為方法參數,執行此操作時,SplashFormBase.ProcessCommand方法將接收這些簡單對象作為arg參數,并接收DemoProgressSplashScreen.CommandId枚舉器值作為cmd參數,檢查cmd參數來確定哪個命令發送到您的啟動屏幕并相應地使用arg值。

 下面的 ViewModel 代碼調用SetSplashScreenState方法來傳輸閃屏標簽的“幾乎完成...”字符串?!?SetSplashScreenProgress ”發送當前(80)和最大(100)進度條值。

C#:

public class Form1ViewModel {
protected ISplashScreenService SplashScreenService {
get { return this.GetService<ISplashScreenService>(); }
}
public void Show() {
SplashScreenService.ShowSplashScreen("SplashScreen1");
SplashScreenService.SetSplashScreenState("Almost done..."); //label text
SplashScreenService.SetSplashScreenProgress(80, 100); //progress bar values
}
}

VB.NET:

Public Class Form1ViewModel
Protected ReadOnly Property SplashScreenService() As ISplashScreenService
Get
Return Me.GetService(Of ISplashScreenService)()
End Get
End Property
Public Sub Show()
SplashScreenService.ShowSplashScreen("SplashScreen1")
SplashScreenService.SetSplashScreenState("Almost done...") 'label text
SplashScreenService.SetSplashScreenProgress(80, 100) 'progress bar values
End Sub
End Class

 SetSplashScreenState方法使用cmd參數的CommandId.MVVMSetState值調用ProcessCommand重寫。SetSplashScreenProgress方法調用ProcessCommand重寫兩次:首先,cmd參數返回 CommandId.SetProgressValue;其次,cmd參數返回 CommandId.SetProgressValue,讀取這些參數值并應用來自arg參數的數據。

C#:

public partial class SplashScreen1 : SplashScreen {
public SplashScreen1() {
InitializeComponent();
}
#region Overrides
public override void ProcessCommand(Enum cmd, object arg) {
base.ProcessCommand(cmd, arg);
DemoProgressSplashScreen.CommandId command = (DemoProgressSplashScreen.CommandId)cmd;
//received from the SetSplashScreenState method
if(command == DemoProgressSplashScreen.CommandId.MVVMSetState)
labelControl2.Text = (string)arg;
//two separate values received from the SetSplashScreenProgress method
if(command == DemoProgressSplashScreen.CommandId.SetMaxProgressValue)
progressBarControl1.Properties.Maximum = (int)arg;
if(command == DemoProgressSplashScreen.CommandId.SetProgressValue)
progressBarControl1.EditValue = (int)arg;
}
#endregion
}

VB.NET:

Partial Public Class SplashScreen1
Inherits SplashScreen
Public Sub New()
InitializeComponent()
End Sub
#Region "Overrides"
Public Overrides Sub ProcessCommand(ByVal cmd As System.Enum, ByVal arg As Object)
MyBase.ProcessCommand(cmd, arg)
Dim command As DemoProgressSplashScreen.CommandId = CType(cmd, DemoProgressSplashScreen.CommandId)
'received from the SetSplashScreenState method
If command Is DemoProgressSplashScreen.CommandId.MVVMSetState Then
labelControl2.Text = DirectCast(arg, String)
End If
'two separate values received from the SetSplashScreenProgress method
If command Is DemoProgressSplashScreen.CommandId.SetMaxProgressValue Then
progressBarControl1.Properties.Maximum = DirectCast(arg, Integer)
End If
If command Is DemoProgressSplashScreen.CommandId.SetProgressValue Then
progressBarControl1.EditValue = DirectCast(arg, Integer)
End If
End Sub
#End Region
End Class

下圖展示了結果。

 Running results

 當您更新一個啟動屏幕元素時,請使用上面的示例。否則,由于SetSplashScreenState方法總是返回CommandId.MVVMSetState作為cmd參數,因此無法知道arg數據應該去哪里。對于這種情況,請改用以下方法之一。 

  • 使用復雜對象作為參數調用SetSplashScreenState方法,該對象應包含枚舉器值和所需的數據。您可以使用System.Tuple結構體、System.Collections.Generic.KeyValuePair對象或object[]數組作為參數。
  • 調用使用DevExpress.Utils.MVVM.Services.SplashScreenServiceState對象作為參數的SetSplashScreenState方法,此對象具有Command和State fields字段,使用這些字段可以傳遞所需的數據和相應的枚舉器值。

這些方法如以下代碼所示。首先,聲明一個自定義SplashScreenCommand枚舉器。

C#:

public enum SplashScreenCommand {
StateLabelCommand,
PercentLabelCommand,
ProgressBarCommand
}

VB.NET:

Public Enum SplashScreenCommand
StateLabelCommand
PercentLabelCommand
ProgressBarCommand
End Enum

這些自定義枚舉器值標記來自SetSplashScreenState方法的不同數據類型。

C#:

public void Show() {
SplashScreenService.ShowSplashScreen("SplashScreen1");
//customizing the first label text
SplashScreenService.SetSplashScreenState(new SplashScreenServiceState(SplashScreenCommand.StateLabelCommand, "Almost done..."));
//customizing the second label text
SplashScreenService.SetSplashScreenState(new SplashScreenServiceState(SplashScreenCommand.PercentLabelCommand, "80%"));
//sending the current progress bar value
object[] customArray = new object[] { SplashScreenCommand.ProgressBarCommand, 80 };
SplashScreenService.SetSplashScreenState(customArray);
}

VB.NET:

Public Sub Show()
SplashScreenService.ShowSplashScreen("SplashScreen1")
'customizing the first label text
SplashScreenService.SetSplashScreenState(New SplashScreenServiceState(SplashScreenCommand.StateLabelCommand, "Almost done..."))
'customizing the second label text
SplashScreenService.SetSplashScreenState(New SplashScreenServiceState(SplashScreenCommand.PercentLabelCommand, "80%"))
'sending the current progress bar value
Dim customArray() As Object = { SplashScreenCommand.ProgressBarCommand, 80 }
SplashScreenService.SetSplashScreenState(customArray)
End Sub

由于您的數據現在附帶了相應的枚舉器值,因此可以確定arg參數中存儲了哪些數據并正確使用它。

C#:

public override void ProcessCommand(Enum cmd, object arg) {
base.ProcessCommand(cmd, arg);
if(cmd.Equals(SplashScreenCommand.StateLabelCommand)) stateLabel.Text = (string)arg;
if(cmd.Equals(SplashScreenCommand.PercentLabelCommand)) percentLabel.Text = (string)arg;
if(cmd.Equals(SplashScreenCommand.ProgressBarCommand)) progressBarControl1.EditValue = (int)arg;
}

VB.NET:

Public Overrides Sub ProcessCommand(ByVal cmd As System.Enum, ByVal arg As Object)
MyBase.ProcessCommand(cmd, arg)
If cmd.Equals(SplashScreenCommand.StateLabelCommand) Then
stateLabel.Text = DirectCast(arg, String)
End If
If cmd.Equals(SplashScreenCommand.PercentLabelCommand) Then
percentLabel.Text = DirectCast(arg, String)
End If
If cmd.Equals(SplashScreenCommand.ProgressBarCommand) Then
progressBarControl1.EditValue = DirectCast(arg, Integer)
End If
End Sub

 下圖展示了一個帶有進度條和兩個標簽的啟動畫面,這三個元素使用SetSplashScreenState方法更新。

Startup screen
等待表單

 要顯示等待表單,使用相同的ShowSplashScreen和SetSplashScreenState方法。表單有兩個標準的文本塊——標題和描述,因此SetSplashScreenState應該傳遞一個在Wait Form的ProcessCommand方法中解析的雙字符串數組。

C#:

public class MyWaitForm : DevExpress.XtraWaitForm.DemoWaitForm {
public override void ProcessCommand(Enum cmd, object arg) {
string[] args = arg as string[];
SetCaption(args[0]);
SetDescription(args[1]);
}
}

public class MyWaitFormViewModel {
protected ISplashScreenService SplashScreenService {
get { return this.GetService<ISplashScreenService>(); }
}
public async System.Threading.Tasks.Task Wait() {
SplashScreenService.ShowSplashScreen("MyWaitForm");
SplashScreenService.SetSplashScreenState(new string[] { "Please, wait", "In progress..." });
SplashScreenService.HideSplashScreen();
}
}

VB.NET:

Public Class MyWaitForm
Inherits DevExpress.XtraWaitForm.DemoWaitForm

Public Overrides Sub ProcessCommand(ByVal cmd As [Enum], ByVal arg As Object)
Dim args As String() = TryCast(arg, String())
SetCaption(args(0))
SetDescription(args(1))
End Sub
End Class

Public Class MyWaitFormViewModel
Protected ReadOnly Property SplashScreenService As ISplashScreenService
Get
Return Me.GetService(Of ISplashScreenService)()
End Get
End Property

Public Async Function Wait() As System.Threading.Tasks.Task
SplashScreenService.ShowSplashScreen("MyWaitForm")
SplashScreenService.SetSplashScreenState(New String() {"Please, wait", "In progress..."})
SplashScreenService.HideSplashScreen()
End Function
End Class

打開并保存文件對話框服務

這些服務調用允許用戶打開文件并將其保存到本地存儲的對話框。

接口

 IOpenFileDialogService , ISaveFileDialogService

管理控件

沒有。

Global Registration

兩項服務均已注冊。

Local Registration

C#:

mvvmContext1.RegisterService(OpenFileDialogService.Create());
mvvmContext1.RegisterService(OpenFileDialogService.Create(mySettings));
mvvmContext1.RegisterService(SaveFileDialogService.Create());
mvvmContext1.RegisterService(SaveFileDialogService.Create(mySettings));

VB.NET:

mvvmContext1.RegisterService(OpenFileDialogService.Create())
mvvmContext1.RegisterService(OpenFileDialogService.Create(mySettings))
mvvmContext1.RegisterService(SaveFileDialogService.Create())
mvvmContext1.RegisterService(SaveFileDialogService.Create(mySettings))
Create() 方法

Create()——創建一個文件對話框服務。

 Create(SaveFileDialogServiceOptionsdialogServiceOptions)/Create(OpenFileDialogServiceOptionsdialogServiceOptions)——使用指定的設置創建所需的文件對話框服務(請參閱“公共服務方法”部分中列出的對話框屬性)。

公共服務方式
  • ShowDialog(Action<CancelEventArgs> fileOK, string directoryName)——顯示當前對話框服務,如果文件成功打開(保存),則執行fileOK回調,可選的directoryName參數指定啟動對話框文件夾,對于 SaveFileDialogService,第三個字符串 fileName參數也可用,該參數指定保存文件的默認名稱。
  • MultiSelect ——一個布爾屬性,指定是否允許用戶同時打開多個文件(僅限 OpenFileDialogService)。
  • OverwritePromt —— 一個布爾屬性,指定當您嘗試保存名稱已存在的文件時是否顯示確認消息(僅限 SaveFileDialogService)。
  • Title —— 指定對話框標題的字符串值,此屬性和以下所有屬性均繼承自FileDialogService基類。
  • DialogStyle——允許您在常規的WinForms和可皮膚的DevExpress對話框之間進行選擇。
  • Filter ——指定文件擴展名的字符串值,此對話框支持,這個字符串應該包含過濾器的描述,后面跟著豎條和過濾器模式。下面的代碼演示了一個示例。

C#:

this.Filter = "JPEG Images|*.jpg;*.jpeg|PNG Images|*.png|RAW Image Data|*.raw";

VB.NET:

Me.Filter = "JPEG Images|*.jpg;*.jpeg|PNG Images|*.png|RAW Image Data|*.raw"
  • File——返回對話框打開(保存)的文件。

文件夾瀏覽器對話框服務

接口

IFolderBrowserDialogService

管理控件

沒有。

Global Registration

該服務已注冊。

Local Registration

C#:

mvvmContext1.RegisterService(FolderBrowserDialogService.Create());
mvvmContext1.RegisterService(FolderBrowserDialogService.Create(options));

VB.NET:

mvvmContext1.RegisterService(FolderBrowserDialogService.Create())
mvvmContext1.RegisterService(FolderBrowserDialogService.Create(options))
Create() 方法

Create()——創建文件夾瀏覽器對話框服務的新實例。

 Create(FolderBrowserDialogServiceOptionsdialogServiceOptions)——使用指定的設置創建文件夾瀏覽器對話框服務的新實例(請參閱“公共服務方法”部分中列出的對話框屬性)。

公共服務方式
  • ShowDialog() ——顯示文件夾瀏覽器對話框。
  • ShowNewFolderButton—— 一個布爾屬性,指定是否允許用戶在當前層次結構中創建新文件夾。
  • StartPath——指定最初選擇的文件夾的字符串屬性。
  • RootFolder—— Environment.SpecialFolder類型的屬性,它將層次結構限制為特定文件夾(例如“我的文檔”文件夾)。
  • 描述—— 一個字符串屬性,允許您指定對話框的描述。
  • DialogStyle——允許您在常規 WinForms 和DevExpress XtraFolderBrowser對話框之間進行選擇。DevExpress 對話框有“Wide”或“Compact”樣式(請參閱XtraFolderBrowserDialog.DialogStyle屬性)。

如何使用服務擴展方法

本節介紹如何使用服務擴展方法的最常見參數。

對象視圖模型

 此參數存儲應導航到、在對話框中打開、托管在新 DocumentManager 文檔中等的子ViewModel實例。要創建此類實例,請使用ViewModelSource.Create方法。

C#:

//ViewModelA.cs
public class ViewModelA {
. . .
public static ViewModelA Create() {
return ViewModelSource.Create<ViewModelA>();
}
}

//ViewModelB.cs
public class ViewModelB {
ViewModelA childViewModel;

public ViewModelB() {
childViewModel = ViewModelA.Create();
}

IDialogService DialogService {
get { return this.GetService<IDialogService>(); }
}

public void ShowDialog() {
DialogService.ShowDialog(MessageButton.OK, "This dialog contains View A", "ViewA", childViewModel);
}
}

VB.NET:

'ViewModelA.vb
Public Class ViewModelA
. . .
Public Shared Function Create() As ViewModelA
Return ViewModelSource.Create(Of ViewModelA)()
End Function
End Class
'ViewModelB.vb
Public Class ViewModelB
Private childViewModel As ViewModelA

Public Sub New()
childViewModel = ViewModelA.Create()
End Sub

Private ReadOnly Property DialogService() As IDialogService
Get
Return Me.GetService(Of IDialogService)()
End Get
End Property

Public Sub ShowDialog()
DialogService.ShowDialog(MessageButton.OK, "This dialog contains View A", "ViewA", childViewModel)
End Sub
End Class
object parentViewModel

 作為SetParentViewModel擴展方法的替代方法,該參數傳遞parent ViewModel的一個實例,使用此參數的擴展方法通常也有Parameter參數。

對象參數

 這個參數將特定的對象傳遞給實現ISupportParameter接口的子ViewModels。實現此接口的ViewModels具有Parameter屬性,該屬性會重新計算此參數并將其傳遞回調用方法的位置。

C#:

//child ViewModel
public class LoginViewModel: ISupportParameter {
. . .
public object Parameter {
get {
// 3. Returns the new parameter value
}
set {
// 2. myParameter object received from the extension method.
}
}
}

//parent ViewModel
// 1. The extension method is called
DialogService.ShowDialog(MessageButton.OK, "This dialog passes the parameter to the child ViewModel", "LoginView", myParameter, this);
// 4. myParameter object now has a new value, set within the child ViewModel

VB.NET:

'child ViewModel
Public Class LoginViewModel
Implements ISupportParameter
. . .
Public Property Parameter() As Object
Get
' 3. Returns the new parameter value
End Get
Set(ByVal value As Object)
' 2. myParameter object received from the extension method.
End Set
End Property
End Class

'parent ViewModel
' 1. The extension method is called
DialogService.ShowDialog(MessageButton.OK, "This dialog passes the parameter to the child ViewModel", "LoginView", myParameter, Me)
' 4. myParameter object now has a new value, set within the child ViewModel
方法變化

 共有三種可能的方法參數:viewModel、parentViewModel和parameter。然而,只能有兩種可能的擴展方法組合。

  • viewModel:創建一個子 ViewModel(包括其父級和必需的參數),并將該實例傳遞給 View。
  • 參數+ parentViewModel:參數被注入到View中并傳遞給為此View創建的子ViewModel。

對于后一種情況,可以使用Framework進行數據注入或者調用以下方法推遲數據注入:

C#:

//postpone all data injection
ViewModelInjectionPolicy.DenyViewModelInjection();

//postpone parameter injection
ViewModelInjectionPolicy.DenyImmediateParameterInjection();

//postpone parentViewModel injection
ViewModelInjectionPolicy.DenyImmediateParentViewModelInjection();

VB.NET:

'postpone all data injection
ViewModelInjectionPolicy.DenyViewModelInjection()

'postpone parameter injection
ViewModelInjectionPolicy.DenyImmediateParameterInjection()

'postpone parentViewModel injection
ViewModelInjectionPolicy.DenyImmediateParentViewModelInjection()
掃碼咨詢


添加微信 立即咨詢

電話咨詢

客服熱線
023-68661681

TOP
玩弄丰满少妇XXXXX性多毛 | 无遮挡无掩盖的网站 | 久久精品中文字幕第一页 | 丁香花视频免费播放社区 | 国产人成精品香港三级古代 | 伊人久久五月丁婷婷 | 亚洲国产成人A片乱码 | 黄到下面流水的爽文很污的情话 | 欧美国产亚洲一区二区三区 | 久久久国产高清 | 人人爽人妻精品A片二区 | 亚洲亚洲色爽免费视频 | 韩国三级欧美三级国产三级 | 俺来也网站 | 中文字字幕在线中文乱码2019 | 六月成人| 国产国产人免费视频成69大陆 | 欧美黑人添添高潮A片视频 欧美激情无码成人A片 | 中文字幕AV久久激情亚洲精品 | 亚洲精品欧美 | 久久观看 | 99久久无码一区人妻A片麻豆 | 亚洲电影网址 | 五月天婷婷免费视频观看 | 亚洲一区免费视频 | 美美哒免费高清影院在线直播 | 国产综合有码无码中文字幕 | v片免费在线观看 | 丁香视频在线 | 亚洲一级大片 | 中午字幕在线观看 | 99久久综合国产精品免费 | 国内偷拍2019在线偷拍视频 | brazzers欧美孕交 | 亚洲精品久久久久 | 99久久精品无码一区二区毛片 | 一区二区亚洲精品国产精华液 | 一级毛片免费在线播放 | 久久神马影院 | 日韩最新视频一区二区三 | 日韩亚洲人成在线 | 色欲狠狠躁天天躁无码中文字幕 | 午夜寂寞影视 | 被强行糟蹋的女人A片 | 国产精品扒开做爽爽爽的视频 | 狠狠干天天干 | 亚洲精品入口一区二区乱麻豆精品 | 龙年快乐365电影 | 日韩欧美精品在线 | xxxxhd78日本| 欧美最骚最疯日B视频观看 欧美做愛坉片 | 日韩色情免费高速视频 | 日本一区二区三区免费高清在线 | xxxx欧美| 灌饱娇嫩H将军公主最新章节 | www.黄色毛片 | 18女下面流水不遮网站免费 | 沈清秋屁股扒开臀缝调教 | 国产亚洲日本精品无码电影 | 亚洲深夜福利视频 | 日b视频在线观看 | 黄色成人在线播放 | 欲香欲色天天综合和网 | 中文字幕欧美日韩在线不卡 | www自拍| 国产精品无码AV在线观小说 | 色播在线永久免费视频网站 | 国产网站在线 | 欧美白虎逼| 国产精品资源站 | 激情综合网 | 丁香花视频在线播放免费观看 | 欧美 亚洲 中文 国产 综合 | 美国三级在线 | 最近韩国日本免费高清观看免费 | 啊轻点灬大巴太粗太长视频 | 综合干狼人综合首页 | 天堂在线视频精品 | 黄色成年 | 免费观看又色又爽又黄的 | 国产又湿又黄又硬又刺激视频 | 国产成人综合洲欧美在线 | 动漫免费在线观看 | 伊人成人综合网 | 一区二区三区成人A片在线观看 | 一区二区影院 | 草草影院w37 | 91av影院 | 国产一卡2卡3卡4卡无卡免费视频 | 快播人人看电影网 | 18以下勿进色禁网站永久视频 | 一区二区视频在线观看高清视频在线 | 91精品视频网站 | 精品国产午夜久久久久九九 | 永久免费观看国产裸体美女 | 黄桃AV无码免费一区二区三区 | 秋霞一区二区三区 | 日日碰狠狠躁久久躁婷婷 | 不卡免费视频 | 超级H纯肉 | 日韩制服丝袜在线 | 91网站网址最新 | 国产97色在线 | 免费 | 日韩美一区二区 | 久久99精品天天中文字幕 | 亚洲一卡2卡三卡4卡 127 | 在线播放国产精品 | 午夜视频h | 黑人啪啪 | 国产精品人妻出轨 | 国产激情无码激情A片免费软件 | 国产成人免费 | 国产成人精品午夜免费 | 五月天婷婷在线观看视频 | 免费黄毛片 | 韩国理伦电影 | 耽肉高H喷汁呻吟受攻 | 热久久久久久久 | 一夲道人妻熟女AV网站 | 2017国产小视频 | 国产极品久久 | 苍井空人体b| 中文字幕国产在线观看 | 久久这里只精品99百度 | 色欲久久99精品久久久久久AV | 国产综合一区二区三区 | 国产亚洲欧美在线观看三区 | 欧美14一15sex性h| 国精一二二产品无人区免费应用 | 亚洲欧美日韩中文字幕在线不卡 | 麻豆网| 极品美女久久久久久久久久久 | 免费最新看电影的网站 | 国产理论剧情大片在线播放 | 色中色最新域名 | 青青草国产线观看 | 色中色最新网址 | 含紧一点H.边做边走教官 | 亚洲综合精品香蕉久久网97 | 99久久精品国内 | 国产精品久久久久秋霞影视 | 夜夜春影院 | 成人午爽爽爽A片免费下载 成人午夜A片产无码免费视频日本 | 久操网视频 | 亚洲欧洲国产精品久久 | 国产一级一片免费播放刺激 | 免费黄色一级毛片 | 五月天婷婷免费观看视频在线 | 被黑人20厘米强交 | 亚洲手机在线观看 | 免费国产在线视频 | 欧美精品18videose 性欧美 | 清纯漂亮小美女准备啪啪 | 99热久久国产精品这里有 | 久在线视视频在线观看 | 最新在线观看精品国产福利片 | 国产一区二区三区国产精品 | 秋霞一区 | 久久综合久久久 | 色视频网站2 | 波多野结衣久久精品 | 97青草最新免费精品视频 | 三级高清 | 三级黃色男人的天堂 | 免播放器在线观看 | 无码欧美黑人又大又 | 美味的三姐妹在线观看 | 国产成人精品视频 | 国产午夜福利100集发布 | 男女做爰猛烈动高潮A片色情 | 国产免费看插插插视频 | 国产精品免费久久久久软件 | 污视频app网址丝瓜视频 | 中文字幕亚洲码在线 | 国产熟妇另类久久久久 | 日本黄色免费网站 | 中文字幕 在线 欧美 日韩 制服 | 免费看黄色一级 | 国产春色| 精品一卡2卡三卡4卡三卡免费 | 亚洲国产精品日本无码网站 | 黄色网址免费看 | 久久精品免费观看 | 欧洲无线码免费一区 | 久久澡人人澡狠狠澡 | 亚洲精品久久无码AV片麻豆 | 少妇系列之白嫩人妻 | 四虎影视免费在线 | 成人片免费观看WWW 成人免费在线电影 | 日本v在线 | 热久久国产欧美一区二区精品 | 亚洲乱码日产精品M | 欧洲成人免费高清视频 | 亚洲精品美女偷拍一区二 | 俺去也伦理片 | 亚洲A片无码一区二区三区公司 | 欧美性猛交aa一级 | 午夜精品久久久久久久久日韩欧美 | 免费污视频在线观看 | 国产成人影院 | 无码AV大香线蕉伊人久久 | 天天躁日日躁狠狠躁 | 麻豆电影影院在线 | 久久国产精品999 | 亚洲免费一级视频 | 欧美三级成人理伦 | 成年男人裸j免费网站 | 中文字幕国产综合 | www.最色| 亚洲五月综合自拍区 | 91精品国产免费入口 | 最好看的最新的中文字幕3 最近2019中文字幕免费 | 清扫魔 | 色哟哟免费精品网站入口 | 新午夜影院 | 调戏床上美女 | 欧美色综合高清视频在线 | 六月丁香综合网 | 国产毛片久久国产 | 男人和女人做污污污的事APP免费 | 精品乱码一区二区三区四区 | 激情欲成人AV在线观看AV性 | 91制片厂制作果冻传媒麻豆 | 三级全黄APP播放 | 国产精品VIDEOSSEX久久发布 | 国产人妻精品区一区二区三区 | 狠狠色丁香婷婷综合激情 | 一本久久综合亚洲鲁鲁五月天 | 国产720刺激i在线视频 | 色情A片成人网站免费看 | 四虎影视成人永久免费观看视频 | 大地影院日本高清免费完整版 | 无码A片激情做爰视频在线观看 | 女人张开腿让男人桶爽的 | 看一级毛片女人洗澡 | 天堂tv亚洲tv日本tv不卡 | 无码中文字幕免费一区二区蜜桃 | 窝窝视频成人影院午夜在线 | 性过程写得很黄很详细的小说 | 风韵人妻丰满熟妇老熟女 | 国产精品xxx电影 | 高清有码国产一区二区 | 免费又黄又爽A片免费看 | 欧美性猛片AAAAAAA | 国产免费观看大片黄 | 国产成人AV三级在线影院 | 亚洲日韩视频 | 依人成人 | 99精品无人区乱码在线观看 | 久久日韩精品无码一区 | 欧美激情图区 | 国产免费不卡视频 | 久国产视频 | 午夜成人影视神马 | 国产黄色免费在线观看 | YIN荡俱乐部调教男男 | 在线看免费完整欧美电影网站 | 8x成人永久免费视频 | 死尸videosdeexotv 斯大林格勒战役免费高清观看 | 欧美日韩91 | 影音先锋中文AV资源网 | 强行挺进朋友漂亮的娇妻作者 | 久操视频在线免费观看 | 成年人黄国产 | 野花成人福利在线 | 国产猛男猛女超爽免费视频 | 亚洲一-卡2卡3卡乱码... | 免费精品国产人妻国语麻豆 | 国产精品大陆在线视频 | 黄色一级片免费 | 日本三日本三级香港三级 | 91免费国产在线观看 | 久热这里只有精品在线 | a级片日韩| 进进出出好涨啊粗大动态图 | 和邻居交换做爰伦理 | 国产在线观看www | 女人张开腿让男人桶免费网站 | 男女国产猛烈无遮挡色情 | 久久国产精品一国产精品金尊 | 免费v片在线看 | 韩国女人高潮嗷嗷叫视频 | 精品中文字幕久久久久久 | 青草视频在线免费 | 国产特级片 | 国产成人精品亚洲精品一区色欲 | 91精品国产免费入口 | 薰衣草影院 | 国产午夜精品久久理论片小说 | 最近电影手机在线影院 | 九九精品久久久久久久久 | 欧美极品欧美精品欧美视频 | 一区二区三区精密机械 | 大学生做爰全过程免费的视频 | hh99me福利毛片在线看 | 四虎影视国产在线观看精品 | 成版抖音富二代 | 国产黄| 无限免费动漫看片的视频 | 久久这里精品青草免费 | 亚洲精品久久午夜无码一区二区 | 丁香狠狠色婷婷久久综合 | 亚洲一区二区三区无码中文A片 | 亚洲欧美中文日韩综合图区 | 新人人影视 | 韩国医院的特殊待遇5 | 久久精品夜夜春 | 国产99久久九九免费精品无码 | 日本韩国的免费观看视频 | 久久久久久一级毛片免费无遮挡 | 一级做a爰片久久毛片16 | 亚洲伦 | 最刺激的乱l仑小说 | 亚洲人成网站999久久久综合 | 天天综合天天干 | 成年人黄色片网站 | 国产精品久久国产三级国电话系列 | 欧美一区二区在线观看 | 水蜜桃视频下载方法 | 午夜成人在线视频 | 成人午夜精品视频在线观看 | 国产精品国产三级国产AV剧情 | 久操综合在线 | 伊人久久亚洲精品一区 | 精品91自产拍在线观看99re | 国产亚洲精品久久AV | 亚洲欧美在无码片一区二区 | 国产精品路线1路线2路线 | 老湿机免费体十分钟 | 99免费看| 日日摸夜添夜夜夜添高潮 | 中文日韩亚洲欧美字幕 | a毛片基地免费全部视频 | WWW婷婷AV久久久影片 | 爱的尸检报告 | 狠狠色噜噜狠狠狠狠网站视频 | 九九在线观看精品视频6 | 7723日本电影免费观看完整版 | 一区二区高清视频 | 麻豆人妻无码性色AV | 一级黄色a视频 | 韩国三级日本三级在线观看 | 97色伦色在线综合视频 | 欧美阿v高清资源在线 | 亚洲欧美中文日韩在线v日本 | 狠狠躁18三区二区一区 | 亚洲精品一区二区精华液 | 一道本不卡高清专区 | 四虎影视最新的2024版地址 | 扒开女人下面使劲桶动态图 | 亚洲第一免费播放区 | 亚洲精品第一国产麻豆 | 欧美精品做人一级爱免费 | 国产人妻人伦精品1国产 | 国产熟女一区视频在线播放 | 91亚洲自偷手机在线观看 | 欧美又大又粗毛片多喷水 | 色播久久| 中文字幕免费播放 | 99久久久无码国产精品免费砚床 | 成人性视频免费网站在线 | 国产A级毛片色咪味 | 日日噜噜噜夜夜爽爽狠狠 | 国产精品久久人妻无码蜜 | 我和丰满岳疯狂做爰 | 免费看一区无码无A片 | 欧美激情视频一区二区免费 | 国产视频精品免费 | 中文字幕一级片 | 97视频久久久 | 免费看国产成人无码A片 | 亚洲一区综合图区 | 老王轻一点儿好爽在深一点 | 中文精品一区二区三区四区 | 777奇米影视一区二区三区 | 在线综合亚洲中文精品 | 久操国产在线 | 精品无码国产一区二区日本 | 国产单亲乱子伦视频 | 九九这里有精品 | 男人J放进女人P全黄网站 | 青草影院在线观看 | 看看的在线视频国产 | 国内精品久久久久鸭 | 欧美性受xxxx黑人xyx性爽 | 精品一区二区在线观看 | 成熟人妻AV无码专区A片 | 国产剧情www.yw193.com | 理论片午午伦夜理片1 | 涩涩片大全百度影音 | 一个人看的视频WWW高清免费 | 青青青国产精品免费观看 | 人妻少妇69式99偷拍 | 校园黄乱色伦短篇小说 | 最近更新中文字幕大全免费 | 99re最新网址 | 日本一品道无码免费专区在线观看 | 国产精品悠悠久久人妻精品 | 亚洲愉拍自拍另类天堂 | 一区二区三区四区免费视频 | 人人澡人人澡人人看添欧美 | 澳门永久av免费网站 | 性色欲情网站IWWW | 奇米777四色影视 | 国产v片在线播放免费观 | 中文字幕在线永久视频 | 婷婷亚洲综合 | 日韩欧美一区二区三区视频 | 成人妇女免费播放久久久 | 国产无套内射又大又猛又粗又爽 | 国产国语在线播放视频 | 永久免费看黄A片无码软件 永久免费毛片 | 漂亮的丰年轻的继坶3在线观看 | 国产美女流白浆的免费视 | 日本午夜大片a在线观看 | 欧美v日本| 欧美阿v天堂视频在99线 | 日本一卡二卡三卡四卡无卡免费播放 | 亚洲国产成人精品一区91 | 欧美综合久久 | 五月婷婷综合色 | 午夜伦理yy44008影院 | 婷婷开心激情综合五月天 | 色激情综合网 | 伊人激情综合网 | 免费视频大片在线观看 | 最新99热| 精品成人久久 | 九热视频| 牛牛在线(正)精品视频 | 久久AV无码乱码A片无码蜜桃 | 2024最新国产不卡a国内2024 | 熟女丰满老熟女熟妇 | 久久一日本道色综合久久m 久久一日本道色综合久 | 欧美日韩一 | 影音先锋2024av资源网 | 色爱综合区 | 亚1州区2区3区4区产品乱码2021 | 影音先锋av熟女资源网 | 欧美极品brazzers 高清 | 亚洲一区二区在线视频 | 亚洲99精品A片久久久久久 | 吉泽明步超m自缚痴女 | 理论在线视频 | 久久免费视频1 | www.黄色网.com| 成人色网| 91久色视频 | 免费又粗又硬进去好爽A片视频 | 最近韩国日本免费观看MV免费版 | 国产传媒18精品A片在线观看 | 国产欧美亚洲日韩图片 | 91精品国产免费入口 | 男女做爰猛烈啪啪吃奶真人免费 | 久久好在线视频 | 午夜福利体验试看120秒 | 一二三四中文字幕 | 成人99国产精品一级毛片 | 国产香线蕉手机视频在线观看 | 色在线视频网站 | 狠狠干一区 | 8848hh四虎| 日韩精品人妻AV一区二区三区 | 国产成人综合精品 | 2024精品手机国产品在线 | 欲香欲色天天影视大全 | 91破处视频| 欧美色xx| 欧美日韩国产中文高清视频 | 蜜桃色情在线观看 | 久久草在线精品视频99 | 久久草这在线观看免费 | 动漫成年美女黄漫网站 | 黄网站免费永久在线观看下载 | 用力C小SAO货奶头都硬了校园 | 日本亚洲欧洲免费无码 | 欧美人成片免费看视频不卡 | 果冻制作传媒免费版 | 亚洲美洲韩美在线观看 | 韩国日本三级三级人 | 免费毛片软件 | 亚洲精品一区二区三区无码A片 | 国产一级网站 | 亚洲中文无码永久在线 | 精品久久久久久无码人妻国产馆 | 欧美sss | 一炕四女被窝交换啪啪 | 四虎天堂| 好紧好湿太硬了我太爽了文字 | 国产精品久久久久久久久久久久 | 五月激激激综合网色播胖胖 | 国产激情视频在线观看 | 色戒汤唯梁朝伟七分频视频 | 亚洲中文字幕一二三四区苍井空 | 国产精品久久国产精品99 | 精品亚洲欧美中文字幕在线看 | 永久免费不卡在线观看黄网站 | 欧美黄色一级网站 | 丁丁影院 | 91福利一区| 国产真实乱子伦新视频 | 薄冰电视剧全集40完整版 | 深夜福利欧美 | 免费的三级毛片 | 亚洲图片欧美在线97色色 | 日韩精品中文字幕在线观看 | 视频二区 调教中字 知名国产 | 黄页网站在线免费观看 | 国产免费观看大片黄 | 婷婷色在线 | 小黄文纯肉污到你湿 | 99久久成人| 99热久久这里只精品国产WWW | www夜夜操com| 777午夜精品久久AV蜜臀 | 果冻传媒网站免费入口破解版 | 九九九九在线视频播放 | 玖玖玖视频在线观看视频6 玖玖玖免费观看视频 | 一个人看免费视频www在线观看 | 五月婷婷六月天 | 人妻天天爽夜夜爽三区麻豆A片 | 亚洲视频久久 | 亚瑟影院在线观看wwww | 国产午夜精品久久理论片 | 久久人人玩人妻潮喷内射人人 | 日本一在线中文字幕天堂 | 国产成人综合久久精品下载 | 欧美视频在线观看欧美大片 | 国产一级αv片免费观看 | 天天做天天爱夜夜爽毛片毛片 | 天堂网在线最新版www中文网 | 欧美黄色免费网站 | 无码免费一区二区三区免费播放 | 欧美干b | 99热99re8国产在线播放 | 亚洲国产成人久久三区 | 国产无吗一区二区三区在线欢 | 污视频app破解下载 污视频app网址丝瓜视频 | a亚洲欧美中文日韩在线v日本 | 无码免费视频AAAAAA片草莓 | 欧美另类久久久精品 | 日韩欧美极品 | 亚洲欧美综合日韩字幕v在线 | 99re在线精品视频免费 | 日本乱子伦一区二区三区 | 成人全黄三级视频在线观看 | 欧美亚洲偷图色综合 | 开心五月 激情五月 深爱五月 | 宋徽宗是南宋还是北宋 | 国产视频网站在线观看 | 99在线视频精品 | 午夜成人亚洲理伦片在线观看 | 欧美色图天堂网 | 无码中文资源在线播放 | A片无码AV看免费大片在线喝奶 | 吉泽明步 超m自缚痴女 | 亚洲色拍偷拍精品一区二区 | 中文字幕韩国三级少妇在线光看 | 幻女与人xx00毛片免费 | 少妇性BBB搡BBB爽爽爽四川 | 国色天香在线播放社区 | 亚洲精品久久久久AV无码 | 日产免费线路一页二页 | bbbbbbbbb毛片视频 | 国产在线高清一级毛片 | 在线观看中文字幕 | 在线免费观看日本视频 | 久久国产成人亚洲精品影院老金 | 亚洲网站在线观看 | 国产护士一区二区三区 | 亚洲一卡久久4卡5卡6卡7卡 | 青青青国产在线手机免费观看 | 色网址123大全图片 色网址大全123 亚洲 | 日本无码WWW在线视频观看 | 欧美又粗又深又猛又爽A片免费看 | 好硬好湿好大再深一点动态图 | 校园刺激全黄H全肉细节文 校园激情人妻古典武侠 | 人民的名义 未删减版 | 九九久久精品国产免费看小说 | 色综合网 | 日韩黄色一级视频 | 黄色三级网址 | 超级H荡的辣文小说 | 亚洲国产成人久久精品影视 | 五月天婷婷爱 | 亚洲精品久久久无码 | 国产激情视频在线观看 | 成人在线观看不卡 | 久久精品亚洲日本波多野结衣 | 天天干夜夜操 | 熟妇乱子伦漫画啪啪 | 亚洲 天堂 国产在线播放 | 国产精品视频第一页 | 日韩视频大全 | 欧美一区二区在线观看 | 黄色片免费网站 | 色婷婷激情| 国产午夜爽爽窝窝在线观看 | 亚洲欧美日韩一区二区 | 欧美卡2卡4卡无卡免费 | 日本午夜成年在线网站 | 超碰在线路98 | 色欲天天天综合网 | 在线视频免费观看爽爽爽 | 久热国产vs视频在线观看 | 免费无码又爽又刺激A片小说 | 亚洲精品久久精品一区二区 | 亚洲 欧美 制服 另类 无码 | 亚洲第一黄色网址 | 免费黄色小网站 | 人丿澡八人碰人人f人看下载 | 男人狂躁女人A片免费网站 男人猛躁进女人的毛片A片 | 四虎影视免费完整版在线观看 | 朋友的爸爸1免费中字翻译 千色成人网 | 国产午夜福利片 | 国产乱码人妻一区二区三区 | 丁香综合激情 | 国产亚洲精品久久久久小 | 高清国产精品久久久久 | 四房播播最新网址 | 波多野结衣办公室在线观看 | 久草在在线免在线观看视频 | 天天插天天舔 | 波多野结衣a∨免费观看 | 午夜性做爰电影 | 2024琪琪午夜理论电影网 | 日本三级在免费2017 | 777午夜精品久久AV蜜桃小说 | 最近韩国日本免费高清观看直播 | 草草CCY丫C0影院| 日本一区二区三区不卡在线视频 | 在线电影 高清 | 一级毛片60分钟 | 少妇真人直播免费视频 | 国产美女被爽到高潮免费A片 | 亚洲午夜无码久久久久蜜臀av | 国产精品国产三级国产an不卡 | 亚洲日本中文字幕区 | 亚洲无人禁区 | 酒神免费全集观看 | 狠狠综合久久久久综合 | 日日摸夜夜添夜夜添高潮免费A片 | 亚洲综合日韩中文字幕v在线 | 嗯好舒服嗯好猛嗯好大不要 | 成熟妇女免费看A片视频 | 最近高清中文在线国语视频 | 影音先锋av不撸 | 久久无码人妻中文国产AV苍井空 | 亚洲AV國產国产久青草 | 最近最新中文字幕大全手机在线 | 在线成本人动漫视频网站 | 在线萝福利莉18视频 | 国产精品人妻久久久久A片-百度 | 欧美非洲黑人性xxxx | 一个人看的高清视频日本 | 亚洲an天堂an在线观看 | 快播5.0.77精简版 | 免费啪视频观免费视频 | 99自拍视频在线观看 | 成人在线免费网站 | 欧美猛交 | 狠狠色噜噜狠狠狠狠色吗综合 | 男人把我添到了高潮A片 | 97色女| 亚洲精品久久无码一区二区 | 成人在线午夜 | 天天操夜| 黄页免费在线看 | 欧美小伙与老太做爰视频 | 老师好大乳好紧好深 | 黄色网免费观看 | 又色又爽的无遮挡免费网址 | 国产精品高潮呻吟久久影视A片 | 彩途| 亚洲精品国产第一区第二区 | www.奇米777| 在线亚洲中文精品第1页 | 泷川雅美的不雅视频 | 秋霞在线观看视频一区二区三区 | 强迫吊起来玩弄羞辱NP | 四虎影午夜成年免费精品 | 免费观看黄色a一级视频播放 | 日韩操 | 美女扒开尿道让男人捅 | 橘梨纱star 409 | 秋霞午夜伦高清在线观看 | 国产特黄又粗又硬A片 | 美女被C污黄网站免费观看 美女被抽插舔B到哭内射视频免费 | 国偷自产AV一区二区三区蜜臀 | 日本免费一区二区在线观看 | 九九久久国产精品免费热6 九九久久国产精品大片 | 日本BBW丰满牲交片 日本bbw激情bbw | 免费成人一级片 | 日本综合欧美一区二区三区 | 亚洲影视精品 | 日本99久久九九精品无码 | 亚洲精品一区 | 日本成本人片无码免费网站 | 热久在线| 99九九精品国产高清自在线 | 九九九免费观看视频 | 狠狠色丁香久久综合五月 | 日本爽爽爽爽爽爽在线观看免 | 伦理电影中文手机在线观看 | 伦理聚合在线观看 | 免费国产直接看片av | 久久欧美成人A片 | 日本一区二区在线播放 | 有码在线 | 三级日本高清完整版热播 | 大陆精品自在线拍国语 | 2020狠狠操| 桃子视频直播高清在线 | 国产欧美日韩灭亚洲精品 | 欧美一级在线全免费 | 日韩美女乱淫试看屁视频网站 | 久久88香港三级台湾三级中文 | 欧美精品一卡2卡3卡4卡乱码 | 免费观看激色视频网站bd | 欧美一道本一区二区三区 | 免费中文字幕一级毛片 | 久久看片网| 88av 在线| 日本高清免费观看高清电影 | 亚洲区色情区激情区小说 | 色悠久久久久综合欧美99 | 欧美猛交| 丁香综合缴情六月婷婷 | 久久人妻精品国产 | 芊芊的被校长脔日常H | 青草草视频在线观看 | 黑人巨大 xxxxxxx | 麻豆一区二区在我观看 | 久久蝌蚪 | 欧美精品无码一区二区三区老鸭窝 | 无遮挡18禁羞羞视频免费动漫 | 美女诱惑性感揉胸 | J8又粗又硬又大又爽又长A片 | 日本三级香港三级网站 | 色狼村| 真实一级一级一片免费视频 | M字腿绑椅子玉势笔撑夹住双小说 | 久久久国产精品免费看 | 教官你的太大了芊芊h | 亚洲国产成人久久99精品 | 久久免费看少妇高潮A片2012 | 国产精品制服丝袜亚洲欧美 | 精品无码一区二区三区蜜桃 | 国产成人福利在线 | 工口 里番 全彩 无码 | 波多野结衣二区 | 久久久精品久久久久三级 | 成人娱乐导航 | 色婷婷色综合 | EEUSS鲁片一区二区三区 | M字腿绑椅子玉势笔撑夹住双小说 | 黄毛片 | 色偷偷资源 | 亚洲最大黄网 | 色四虎| 精品视频在线观看你懂的一区 | 日韩中文字幕视频在线观看 | 亚洲国产精品一区二区动图 | 久久免费看片 | 性一交一伦一乱一A片 | 99久久999久久久综合精品涩 | 日本免费色网站 | 欧美白虎逼 | 亚洲AV国产成人精品区三上悠亚 | 免费观看网站 | 天天色情 | 夜鲁鲁鲁夜夜综合视频欧美 | 天天在线天天综合网色 | 国产精品AV一区二区三区不卡蜜 | 精品中文字幕一区在线 | 韩国日本不卡高清免费视频 | 老太太援交视频BBW 乱熟女高潮一区二区在线 乱子轮熟睡1区 | WWW色情成人网站 | 久久久乱码精品亚洲日韩小说 | 长篇YIN乱大合集TXT全文下载 | 狠狠色噜噜狠狠狠狠狠色综合久久 | ts在线视频 | 日本三级电影在线看 | 强壮公让我夜夜高潮A片视频 | 色情无码永久免费网站WWW | 久久精品a | 97a蜜桃| 又大又爽又黄无码A片小说 又大又硬又粗做大爽A片 | 国产日韩亚洲精品视频 | 国产日本欧美在线观看 | 男女久久久视频2019 | 一体一道久久88色合综合网 | 成年黄网站 | 2021国产成人综合亚洲精品 | 国产在线视频在线 | 国产黄色一级网站 | 大量国产激情视频在线观看 | 2024国精产品一二二线精华液 | 亚洲精品一区二区三区新线路 |