日韩福利首页在线观看网站-日韩福利免费网站视频在线-日韩福利局二区视频-日韩福利-日韩二区在线-日韩二区三区四区-日韩二区三-日韩电影中文字幕

半岛外围网上直营

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
利記足球官網(官方)網站/網頁版登錄入口/手機版登錄入口-最新版(已更新) 真人boyu·博魚滾球網(官方)網站/網頁版登錄入口/手機版登錄入口-最新版(已更新) 最大網上PM娛樂城盤口(官方)網站/網頁版登錄入口/手機版登錄入口-最新版(已更新) 正規雷火競技官方買球(官方)網站/網頁版登錄入口/手機版登錄入口-最新版(已更新) 雷火競技權威十大網(官方)網站/網頁版登錄入口/手機版登錄入口-最新版(已更新) boyu·博魚信譽足球官網(官方)網站/網頁版登錄入口/手機版登錄入口-最新版(已更新) 權威188BET足球網(官方)網站/網頁版登錄入口/手機版登錄入口-最新版(已更新) 正規188BET足球大全(官方)網站/網頁版登錄入口/手機版登錄入口-最新版(已更新) 99精品视频免费热播在线观看 | 欧美在线观看成人高清视频 | 国产偷窥女洗浴在线观看亚洲 | 国产精品直| 欧美日韩在线不卡 | 天堂在线最新版资源 | 真实国产精品vr专区 | 精品欧美一区二区vr | 色片在线观看 | 国产欧美日韩综合精品一区二区三 | 日韩中文字幕精品一区在线 | 国产吹潮视频在线观看 | 国产在线原创七七欠欠色综 | 精品国产精品精 | 国产又黄又大又长又粗又硬视频 | 欧美曰韩 | 欧美经典日韩在 | 日本大肚子孕妇交xxx | 国产在线精品国自产拍影院 | 国产一区二区在线播放 | 91探花在线观看 | 国产一区欧美亚洲 | 国产又色又爽又黄的视频网站 | 欧美一级电影一区二区 | 日韩一级大片一中字幕 | 母+子+在线视频 | ag亚洲小视频 | 亚洲精品乱码久 | 99在线精品视频在线观看 | 网友自拍露脸国语对白 | 国产国产乱| 亚洲成年看片在线观看 | 精品视频免费 | 韩国床戏激情戏裸戏 | 精品免费国产一区二区三区 | 另类老妇奶性 | 国产欧美精品亚洲日本一区 | 国产思思精品视频 | 国产精品卡2卡三卡4卡 | 日本欧美一区二区三区免费 | 国产亚洲精品欧洲在线观看 | 精品日产卡一卡二卡三入口 | 精品日韩在线一区二区三区 | 日韩欧美三区免费观看 | 日本亚洲国产在线视频 | 日韩在线观看91精品免费 | 日韩精品一区二区最新 | 玩弄牲欲强老熟女 | 在线观看片免 | 亚洲成v | 国产专区一区在线观看 | 欧美五级在线观看视频播放 | 国产在线观看网址精品 | 91极品蜜桃 | 日本欧美一区二区三区免费不卡 | 4480yy午夜私人影院 | 国产精品亚洲精品五月 | 中文字幕∨亚洲日本在线电影 | 国产精品日日做人人爱 | 日韩a优精品在线观看 | 国产亚洲精品字幕在线观看 | 日本熟女视频 | 亚洲一区制服丝袜 | 亚洲综合激情 | 欧美一区二区三区 | www俺去也 | 欧美一区二区三区视频 | 亚洲一本大道中文在线 | 国产免费一区二区三区在线观 | 最近2025年好看中文字幕视频 | 成人一级免费激情网 | 成人国产精品视频 | 国产视频精品分类 | 区二区三区免费 | 旋复花7799电影 | 国产伦精品一区二区三区视 | 日本怡春院欧美一区二区三区 | 亚洲国产一级在线观看 | 亚洲性爱免费网址 | 欧洲一区二区三区免费视频 | 欧美大片欧美激情性色a∨在线 | 国产男女猛视频在线观看 | 天堂中文字 | 成人日韩国产在线 | 国产免费202| 国产老肥熟一区二区三区 | 日韩xxx免费视频 | 免费a视频在线观看 | 99热久re这里只有精品小草 | 欧美一区二区精品国产日韩 | 成人欧美一区二区三区黑人冫 | 欧美日韩一卡二区 | 国产日韩欧美高清一区二区三区 | 国产极品美女在线播放 | 一区二区三区视频在线观看 | 欧美日韩图片一区二区 | 乱码一二区在线亚洲 | 尤物在线精品视频 | 日本不卡一区 | 国产国产久热这里只有 | 8x8ⅹ成人免费观看网站 | 99爱国| 日韩一进一 | 国产午夜福利在线播放87 | 国产乱子伦三级在线播放 | 国产乱子伦一区二区三区黑人 | 国产一区二区三区高清在线播放 | 91视频网址 | 亚洲色大成网站www永久网站 | 欧美激情国产精品视频一区二区 | 国内精品视频在线播放一区 | 欧美国产日韩在线激情观看 | 国产欧美国日产综合 | 国内成人精品亚洲 | 国产亚洲一路线二路线高质量 | 日韩伦理电影中文在线 | 热播影视剧在线观看 | 中文字幕亚洲一区二区三区四 | 欧美激情第1页 | 亚洲香蕉国产高清在线播放 | 亚洲精品网址在线观看 | 91同城快聘| 日本护士色系亚洲精品国产精品 | 99热国产在线播放只有精品 | 99青草青草久热精品视频 | 日韩影片中文字幕 | 国产美女一区二区丝袜美腿 | 日韩精品亚洲春色欧美激情 | aⅴ日本亚洲欧洲免费 | 国产亚洲日韩网曝欧美精品 | 国产午夜福利精品探花 | 97影院午夜午夜伦不卡 | 日本不卡免费中文字幕一 | 国产不卡在线播放 | 成人影视在线看 | 蜜桃成熟时33d | 亚洲线精品一区二区三区四区 | 国产欧美日韩另类精品 | 国产欧美亚洲专区在线 | 观看国产色 | 日韩一区二区视频在线 | 欧美性大战xxxx | 国产性天天综合网 | 国产丶欧美丶日本不卡视频 | 两性色午夜视频在线观看 | 国产在线不卡免费播放 | 精品蜜桃秘?一区二区三区 日本湿姝在线观看 | 精品免费视频观看 | 国产一区二区视频在线关看 | 日本强不 | 乱码一码二码三码四码狼人 | 在线观看网址 | 国产第一页线路1 | 国产91九色在线播放 | 亚洲成综合人在线播放 | 日韩精品综合丝袜制服 | 欧美亚洲日韩国产综合视频网站 | 欧美日韩综合精品网 | 欧美专区日韩高清 | 午夜亚洲国产理论片二 | 乱子伦一区二区三区 | 国产欧美在线视频免 | 欧洲一曲二曲三曲视频 | 亚洲色中文字幕在线播放 | 日本国产亚洲 | 欧美在线视频 | 国产在线观看黄丝袜 | 肉大捧一进一出免费视频 | 午夜福利国产一级欧美片 | 国产极品 | 亚洲十大国产精品污污 | 欧美肥熟| 国产日韩网站 | 亚洲一区欧美一区国产 | 性爱网在线免费 | www在线免费观看视频 | 成人国产精品一区二区八戒网 | 国产伦理精品 | 国产日韩精品欧美激情在线 | 尚好影视 | 免费电视剧 | 亚洲一区二区三区不卡精品 | 亚洲日本va午夜在线影院 | 成人一区免费观看 | 亚洲欧美综合另类中字 | 九九视频免费精品视频 | 欧美日韩国产丝袜另类 | 玖玖玖国产福利在线观看 | 国产在线一区二区三区在线 | 国产人妖综合在线视频 | 国产户外一区二区三区在线 | 国产九九九全国免费视频 | 国产精品亚洲а∨天堂免下 | 亚洲精品乱码一区二区 | 欧美亚洲日本国产黑白配 污污网站在线观看免费 | 欧美日本一91视频国产 | 精品一区二区三区高清 | 精品国产午夜福利在线观看 | 久热爱精品视频在线 | 国产一级特黄的片子 | 欧美精品v日韩精品v国产 | 国产网站免费视频 | 韩国三级 | 欧亚日韩| 日韩欧美中文字幕在线播放 | 91香蕉国产亚洲一卡区国产免 | 欧美性生交大片免费看 | 欧美激情国产精品视频一区二区 | 亚洲中文字幕一二三四区 | 国产精品国内免费一区二区三区 | 欧美嫩交 | 国产手机在线国内精品软件的特点 | 亚洲香蕉国产高清在线播放 | 亚洲综合电影小说图片区 | 国语成人自产拍在线观看 | 国产乱子影视频上线免费观看 | 92看片淫黄 | 军训完被教官灌满精子男男 | 日韩午夜顶级在线观看 | 日本精品成 | 国产偷∨国产偷∨精品视频 | 国产高清亚洲美女精品图片91 | 欧美亚洲自偷自偷图片 | 国自产偷| 成人影视免 | 手机国产乱子伦精品视频 | 日本1区二区三区公司 | 猫咪免费 | 色国产精品一区在线观看 | 欧美日韩永久免费看看视频 | 亚洲综合精品网站在线观看 | 亚洲欧美综合中文 | 亚洲欧美洲成人一区二区 | 国产午夜福利精品一区二区三区 | 中文字幕在线精品男人的天堂 | 欧美人成在线播放网站色 | 水蜜桃视频网站在 | 噜噜噜在线视频免费观看 | 国产精品主播在线 | 国产精品午夜自在在线精品 | 欧美色欧美亚洲高清在线视 | 国产精品网友自拍 | 欧美日韩aa一级视频 | 福利一区二区三区视频在线观看 | 91九色私密保健 | 日韩精品一卡二卡3卡四卡2 | 国产日韩欧美最新在线 | 日本精品一区二区三区四区 | 最新版本安卓下载 | 国产一区自拍欧美 | 97超级 | 国产欧美日韩视频 | 99热99 | 岛国一区二区三区 | 亚洲欧美另类专区 | 欧美日韩一卡二卡 | 欧美国产| 国产精品亚洲一区二区三区 | 国产偷国产偷亚洲高清日 | 成人午夜电影网十八岁勿入 | 国产乡下三级全黄三级 | 欧美日韩国产中文字幕 | 日韩精品一区二区三区大桥未 | 亚洲综合视频在线观看 | 国产91色在线中文电影 | 国产拍偷自偷在线精品 | 亚洲天堂精品在线观看 | 中文字幕人成人乱码亚洲影 | 日本岛国在线观看网址 | 最新国产精品视频免费看 | 丰满大码熟女在线播放 | 国产资源在线视 | 最美情侣高清视频大全 | 岛国大片免费观看 | 亚洲欧美成va人在线观看 | 免费视频在线观看 | 国产亚洲精品一本第四区 | 日韩欧美一区二区三区视频 | 国产精品美女午夜爽爽 | 国产亚洲一区二在 | 亚洲美女一区二区三区 | 免费国产一二三四区 | 欧美性受xxxx黑人猛交 | 国产欧美极品综合一区二区 | 精品乱伦欧美国产 | 青草视频线路 | 国产精品精品一区二区三区 | 国产精品日本一区二区在线 | 亚洲日韩精品一 | 九九在线免费视频 | 一区二区区别是什么 | 日韩99在线一级 | 亚洲色一色噜一噜噜噜人与 | 91热爆 | 一区二区三区四区的在线视频 | 午夜福利在线播放欧美 | 日韩在线看片免费人成视频播放 | 国产精品成人不卡在线观看 | 天堂在线视频网站 | 欧美精品aⅴ一区二区三区 免费中文字幕不卡视频 | 日韩精品三级 | 综合欧美国产视频二区 | 亚洲国产日韩a在线播放 | 欧美国产日韩一区 | 男女羞羞视 | 日韩欧美第一 | 不卡在线观看 | 精品福利私拍 | 亚洲欧美日韩综合在线一区二 | 国产极品视 | 欧美熟女乱轮综合图区 | 亚洲不卡视频在线观看 | 午夜电影国产精品一区 | 九九视频在线免费观看 | 亚洲日韩视 | 级a毛一级a看免费视频 | 夜鲁鲁鲁夜夜综合视频 | 成人动视频国产欧美精品 | 国产情侣在视频 | 国产隔着超薄丝袜进入 | 日本在线播放一区二区三区 | 加勒比综合免费不卡在线观看 | 日本精品影视国产 | 中文日产幕无线码系列 | 欧美性理论片在线观看片免费 | 182tv免费播放线路一线路二 | 日日狠狠| 不卡影院 | 热门电影综艺电视剧在线观看 | 国产乱国产乱老熟300部视频 | 日韩成人激情综合网 | 日韩欧美在线第一页 | 日本vpswindows18| 亚洲精品国产综合 | 国产国产精品人在线观看 | 中文字幕亚洲第一 | 中文字幕国产 | 在线看片日韩 | 日韩一区二区三区视频在线观 | 国产人妖专区视频在线一区 | 国产21区| 综合网国产国产人 | 国产精品亚洲精品爽爽 | 日本三级私人电影网 | 国产黄三级精品在线观看播放 | 在线观看日本亚洲一区 | а√天堂资源官网在线资源 | 三年在线观看免费完整版中文 | 日本电影中文字幕 | 乱子伦国产对白在线播放 | 亚洲人成色777777精品 | 国产一区二区精品夜夜嗨 | 免费看美女午夜大 | 免费的污污的网站在线观看 | 香蕉在线精品视频 | 97中文字幕在线 | 亚洲欧美另类天天更新影院 | 好吊色永久免费视频在线观看 | 国产欧美日产中文一区 | 亚洲v天堂v影 | 日本国产一区二区三区在线观看 | 欧美精品免费观看二区 | 真人性囗交69视频 | 伊人国产在线视频 | 视频一二三区 | 精品国产一区二区三区a | 手机国产乱子伦精品视频 | 直播app下载 | 伊人影视在线观看日韩 | 精品免费国产一区二区三区四区五 | 欧美一区二区三区在线播放 | 日韩高清在线观看一区二区三区 | 日韩在线成年视频人网站观看 | 欧美亚洲国产一区在线观看网站 | 日韩区一区二区三区四 | 国产a∨国片精品一区二区 亚洲欧美日韩中字国产 | 欧美日韩一区四区 | 日本一区视频在线观看 | 国产男女高清视频m免费 | 日韩精品高清在线亚洲天堂 | 国产破外女出血视频全集 | 国产高清在线精 | 香蕉精品亚洲二区在线观看 | 成a人片在线观看手机看 | 国产水手服19禁在线视频网站 | 亚洲成a人一区二区三区 | 午夜爽片超清 | 一级a性色生活片 | 日本乱码伦电影 | 国产精品不卡福利小 | 日韩高清字幕网在线观看 | 日韩高清在线观看不卡一区二区 | 国产伦一区二区三区免费 | 国产免费福利在线视频 | 欧美日韩精| 国产精品视区一二二中文字幕 | 欧美性爱播放器 | 女同国产精品一区二区 | 国产精品va在线观看丝瓜影院 | 国产末成年女噜噜 | 中国在线观看免费的www | 探花视频18免费观看 | 日韩成人免播放器在线视频 | 免费国语高清电影电视 | 国产网站91 | 国产一级爱c片免费播放 | 日韩在线欧美 | 国产性夜夜春夜夜爽18 | 亚州视频一区 | 国产精品日韩综合图片 | 欧美日韩中文在线观看 | 欧美午夜网| 日本一区二区三区在线观看不卡 | 成人a级高清视频在线观看 成人人电影 | 日本午夜欧洲亚洲精品国产 | 午夜亚洲一区二区福 | 国产综合在线91精品思思 | 欧美亚洲a∨中文 | 欧美人与日本人xx在线视频 | 欧美日韩中文国产va另类电影 | 区二区欧美性插b在线视频网站 | 99精品国产最新观看网址 | 在线精品亚洲欧洲第一页 | 国产免费高清 | 亚洲欧美一区二区三区不卡 | 国产精品女同一区二区 | 黑人大战亚洲女在线播放 | 日韩一区二区三区射精百度 | 国产香港日本三级在线 | 对白在线观看 | 欧美国产日韩a欧美在线观看 | 国产高清不卡v清免 | 日韩在线视频线视频免费 | 国产免费不卡午夜福利在线 | 精品午夜国产福利观看 | 综合乱伦自拍三 | 欧美日韩在线观 | 日本精品大胆 | 日韩丝袜视频一区二区 | 男男女女爽爽爽免费视频 | 4k超清国| 国产精品日韩一区 | 99视频在线播放 | 欧美日韩a∨一区二区视频 日本黄本道一区二区在线观看 | 亚洲欧美日本人成在线观看 | 国产亚洲午夜高清国产拍精品 | 国产在线ts人妖免费视频 | 国产爽爽视 | 国产欧美日韩综合精品一区二区 | 日韩xxxx高清在线 | 女人色极品影院 | 亚洲中文字幕在线停止 | 日本视频中文字幕 | 成视频免费国产 | 日本三级在线观看511 | 欧美日韩亚洲国内一区二区三区 | 国产精品精品国产 | 国产精品区乱淫片人成人 | 亚洲一区二区三区不卡在线播放 | 国产午夜小视频在线不卡 | 成人国产日本亚洲精品 | 老司机在线精品视频网站 | 国产拍揄自揄精品视频网站 | 天美传媒官方网站 | 欧美破苞在线 | 18毛多| 欧美性色aⅴ欧美综合色 | 国产一级a爱片 | 全国男人的天堂亚洲 | 中文字幕之不卡 | 国产vr精品亚洲欧美咪咕爱 | 99re6国产精品免费播放 | 欧美日韩精品一区二区在 | 性感美女网站一区二区三 | 日本高清中字 | 国产精品视频丁香花综合 | 日韩25区中文字幕 | 日韩欧美制服诱惑一区二区 | 国产高清一区二区三区免费视频 | 亚洲欧美日韩在线一区二区三区 | 中文字幕日韩精品一区二区三区 | 亚洲v欧美v国产v在线观看 | 三年片在线观看免费大全哔哩哔哩 | 97在线精品国自产拍中文 | 国产直播| 欧洲高清视频在线观看 | 日本xx高清视频免费 | 成全视频在线观看大全 | 亚洲一区二区三区精品影院 | 国产黑色丝袜在线看片不卡顿 | 国产激情在线不卡 | 欧美精品视频一区二区三区 | 亚洲精品视频自拍偷拍 | 亚洲中文字幕无线 | 国产va免费精品 | 国产午夜福利一区在线观看 | 午夜福利国产在线观看1 | 最新手机在线电影 | 国产精品日韩无卡一区二区 | 国产高清一级做a爱在线观看 | 日韩精品中文字幕在线 | 日本有码中文字幕第二页 | 88影视 | 国产制服精品一区二区视色 | 欧美与黑人 | 国产乡下妇女三片 | 在线观看国产福利91啪 | 中美日韩亚洲高清 | 亚洲国产中文日韩精品乱码 | 好看欧美亚洲国产 | 日韩精品日韩 | 欧美三级精品电影高清 | 国产亚洲a | 无人区一码二码三码四码区 | 五十路息与子在线观看 | 欧洲精品色在线观 | 国产一区二区三区免费大片天美 | 午夜理伦片免费 | 国产91剧情在线观看 | 综合一区二区 | 俺来也欧美亚洲a∨在线 | 国产理论高清一卡二卡三卡 | 欧美性bbbbbxxxxx | 青青国产精品 | 欧美日韩国产亚洲 | 国产精品免费大片一区二区 | 福利在线观看 | 婷婷中文视频在线 | 亚洲精品在线看 | 亚洲无卡免费 | 国精产品999国精产 三三电影网 | 福利体验区120秒免费观看 | 国产啪精品视频免费网站 | 亚洲裸男gay网站 | 欧美日韩加勒比精品一区 | 日韩女同互慰互摸在线观看 | 国产欧美日韩综合aⅴ天堂 国产精品一区在线观看 | 夫妻之间免费观看完整版 | 最新全网影视大全电影电视剧 | 日本亚洲最大的色成网站www | 亚洲欧美日本综合 | 精品日本免费一区二区三区 | 国产福利电影网 | 国产免费观看激情 | 色屁屁一区二区三区视频国产 | 福利一区福利二区 | 日韩本免费一 | 日韩精品视频美在 | 国产日本欧美一区二区竹菊 | 午夜性色一区二区三区不卡视频 | 热播电视剧免费追剧 | 成人性毛 | 日韩高清不卡在线视频观看 | 卡一卡二卡三卡四 | 亚洲精品视频一区二 | 最近日本电影免费观看全集 | 成人午夜福利免费体验区 | 国产高清欧美情侣视频 | 亚洲午夜国产片在线观看 | 成人国产高清在线观看 | 精品国偷自产在线视频 | 高清线视频 | 欧美特黄特色 | 涩涩视频午夜福利一区二区 | 中文字幕在线观看亚洲 | 成全视频在线观 | 日本不卡中文字幕一区二区 | 亚洲中文字幕在线一区播放 | 欧美日韩国产在线一区 | 国产精品三级一区二区 | 中文字幕一区二区三区四区五区 | 日韩亚洲欧美理论片 | 亚洲欧美经典 | 在线成本人视 | 永久免费啪 | 国产噜噜噜精品免费 | 成人精品一区二区户外勾 | 欧美黑人巨大多p杂交 | 免费观看| 国产高清在线视频一区 | 寡妇被折腾的死去活来 | 中文字幕亚洲精品资源网 | 精品一区二区夜色 | 国产乱人| 日本在线中文字幕第一视频 | 国产免费一区2区3区4区 | 亚洲一区二区又黄又爽在线观看 | 欧美精品一区二区三区不卡网 | 国产偷窥熟 | 国产精品导航一区二区 | 欧美亚洲日韩一区二区三区中 | 精品欧美亚洲影视 | 欧美一级操 | 国产成年人免费在线观看 | 亚洲国产丝袜一区二区 | 国产在线成人 | 国产欧美日韩一区二区加勒比 | 免费午夜色激情视频网站 | 国产欧美v欧美v在观看 | 日韩福利在线观看 | 亚洲中文在线播放一区 | 三级在线观看免费播放 | 欧美xxxx在线| 亚洲日韩精品一 | 国产日韩另类欧美视频一区二区 | 午夜福利一区二区三区在 | 三级a三级三级 | 男同桌上课时狂揉我下面污文 | 国产99精品视频一区二区三区 | 91豆奶app| 中文字幕九热精品视频在线 | 欧美性bbbbbxxxxx | 欧美又色又爽又黄刺激免 | 国产精品毛毛在线播放 | 在线视频一区二区不卡 | 中文字幕精品二区 | 区免费aⅴ片黄瓜视频 | 日本一本免费高清在线dvd | 国产尤物一区在线不卡 | 日本三级a∨在线观看 | 亚洲欧洲中文字 | 国产伦精品一区二区三区男技 | 亚洲国产日韩在线人成电影 | 巨爆中文| 国产欧美综合一区二区三区 | 欧美成在人线a免费 | 亚洲人成a在线网站 | 亚洲一区二区国产日韩欧美 | 国产在线播放不卡 | 国产亚洲这里只有精品 | 88国产精品视频一区二区三 | 国产色秀视频在线播放 | 亚洲欧美在线x视频 | 阿v视频国产免在线手机观看 | 精品国产理论在线观看不卡 | 国产后入清 | 国产免费午夜福利在线播放92 | 福利动作电影 | 91国内视频在线 | 国产一区二区 | 果冻传媒 | 中文日产 | 3571色院影一区二区三区 | 欧美未发育h日韩在线观看 欧美精品黑人粗大视频 | 欧美精品成人3d在 | 中文字幕人成人乱码亚洲电影 | 日韩视频在线观看 | 色妺妺在线视频喷水 | 日本强乱视频在线 | 国产精品免费一级高清 | 91视频国产大片 | 性爱国产精品福利在线 | 真人性生交免费视频 | 日韩不卡高清中文字幕 | 日本国产一区在线观看 | 国产男女性潮高清免费网站 | 国产乱码精品一区二区三区香蕉 | 中文字幕日韩精品中文区 | 欧美v日韩v亚洲v最新在线观看 | 国产精品不卡视频 | 亚洲日本va午夜在线电影 | 91福利影院还会玩转热点 | 实时更新国内外 | 九九热视频在线免费观看 | 香港特级 | 中文字幕在线播放 | 亚洲人成小说网站色在线 | ⅴa在线观看 | 国产精品一区高 | 热播电视剧电影高清免费在线观看 | 亚洲最大的情人在线 | 国产自产第一区c国产 | 一区二区免费 | 日本在线一区三区国产主播 | 欧美黑人在线免费观看 | 成人国产精品一区二区在线观看 | 欧美第一区 | 欧美精品videosex极品 | 国产欧美日韩一区二 | 国产精品不卡一 | 精品网站不卡 | 办公室激情上司和秘书小说 | 精品乱子伦一区二区三区 | 好吊色青青青国产欧美日韩 | 精品免费国产一区二区三 | 国产一区高清在线欧美 | 国产区在线观看成人精品 | 日本一二区中文字幕在线 | 欧美日韩亚洲精品瑜伽裤 | 91电影| 国产欧美日韩免费一区二区 | 精品一区二区三区四区在线观 | 中文在线观看 | 国产欧美日韩一区二区三区 | а√最新版天堂资源在线 | 国产在线不卡免费高清dvd | 日韩精品二三区 | 欧美午夜理伦三级 | 国产呦在线观看欧美一区 | 国产主播青青草2025 | 精品一区二区三区四区五区六区 | 欧美一级在线全免费 | 欧美系列国产系列一二三四 | 免费手机在线看片 | 秋霞影院午 | 日韩a优精品在线观看 | 99re6在线| 欧美日韩国产va在线观看免费 | 色老头在线永久免费视频 | 成人h视频在线 | 青青青在线播 | 国产精品18 | 欧美一级高清视频在线播放 | 欧美mv亚洲mv在线天堂 | 日韩一区二区三区免费高清 | 日本免费一区二区三区高清视频 | 九九综合黑白配久 | 在线天堂免费中文字幕 | 日本免费一区二区三区视频 | 北京国贸大酒店张津 | 伦理片手机在线观看 | 91国产精品午夜福利免费 | 国产91蝌蚪 | 欧美日韩电影一级 | 成人国产亚 | ⅹxx欧美| 国产成在线观看免费视频成本 | 免费永久在线观看污污的网站 | 亚洲aⅴ天堂 | 国产精品亚洲二区在线观看 | 亚洲人和日本 | 欧美综合亚洲图片综合区 | 国产在线一区二区三区在线 | 97电影院| 精品一区二区三区视频免费 | 99re8这里有精品热视频 | 免费在线观看国内色片网站网址 | 日韩经典欧美一区二区三区 | 超级媚药痉 | 成人伊人精品色xxxx视频 | 丰满大乳奶做爰ⅹxx视频小说 | 国产精品欧美在线观看 | 日韩欧美国产一区二区浪潮 | 欧洲在线观看一区二 | 国产精品亚洲 | 啪啦完整高清观看视频 | 欧美日韩精品中文字幕 | 成人论坛网 | 国产午夜电影在线电影 | 国产精品免费一区二区在线观看 | 一级国产片一 | 好看动漫 | 亚洲国产精品va在线观看香蕉 | 亚洲精品亚洲欧美综合区 | 国产a∨天天免费观看美女 欧亚成人 | 欧美日韩高清国产aⅴ一区 四区免费视频 | 国产精品日韩中文字幕 | 亚洲国产综合精品中文字幕 | 日韩18未满禁止观看 | 亚洲国产精品yw在线观看 | 综合一区二区三区激情在线 | 欧美一区二区三区在线播放 | 91影院在| 亚洲欧美高清精 | 国产乱妇乱子 | 欧美日韩综合网 | 欧美日韩国产一 | 日韩一品二品三品 | 国产精品va在线观看丝瓜影院 | 乱中年女人伦中 | 国产精品亚洲二区在线观看 | 在线成人免费观看国产精品 | 午夜福利电影在线观看 | 日韩免费电影网站 | 欧美性色欧美 | 日本三级a毛黄特级 | 日本有码中文字幕第一页在线播放 | 欧美日韩国产中文字幕在线 | 最近中文字幕mv免费高清视频 | 国产97在线视频 | 欧美大香线蕉 | 国产91精品在线观看 | 韩国午夜理论在线观看 | 欧美日本一区 | 国产酒店视频在线观看 | 国产精品短篇二区 | 日本一区二区三区在线观看不卡 | 日韩国产一区中文字幕在线观看 | 国产欧美日韩精品综合 | 亚洲日本中文字幕一区二区三 | 日本免费一区二区三区高清视频 | 日韩电影免费在线观看 | 精品一本 | 日本中文字幕在线 | 亚洲天堂一区二区 | 午夜一级韩国欧美日本国产 | 97热久 | 欧美特黄特色三级视频在线观看 | 欧美中文字幕在线第一页 |