国产凹凸在线-国产拗女一区二区三区-国产白白视-国产白领-国产白拍-国产白丝jk被疯狂输-国产白丝喷-国产白丝在线

金喜正规买球

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
91精品露脸在线观看 | 日本免费中文字幕在线看 | 日日狠狠 | 日本高清一区二区三区中文字幕 | 鲁鲁鲁鲁鲁视 | 国产精品日韩欧美 | 成人欧美日韩高清不卡 | 国产亚洲欧美日韩综合在线 | 99日国产精品 | 欧美日韩国产日韩 | 亚洲综合色区激情自拍 | 国产精品色色日本 | 97精品依人久| 欧美一级做a爰片免费 | 国产剧情对白刺激在线 | 精品国产91乱码一 | 精产国品 | 日本2025一道国产高清视频 | 国产女女互摸互慰在线观 | 国产更衣室视频在线观看 | 成人激情电影免费在线观看 | 欧美日产国产 | 亚洲色国产欧美日韩 | 日韩c片在线视频观看网站 欧洲亚洲综合在线播放 | 国产精品日日做人人爱 | 欧美a∨在线观看 | 欧亚精品卡一卡二卡三 | 91豆奶app| 99视频精 | 国产中文字幕在 | 日韩不卡高清区二区三区 | 国产乱轮在线观看 | 国产乱子伦三级在线播放 | 久青青在线观看视频国产 | 乱伦日本影视国产 | 亚洲高清中文字幕 | 国产偷亚洲 | 欧美人成在线观看网站高清 | 99视频精品国在线视频艾草 | 日韩精品乱码在线 | 欧美国产在线一区精品自拍 | 日韩精品高清在线亚洲天堂 | 91视频播放 | 亚洲va在线观看日本 | 国产亚洲精品欧洲在线观看 | 国产亚洲色 | 欧美日韩国产另类一区二区三区 | 87福利在线观看国产 | 国产电影免费在线播放 | 欧美色大成网站www永久男 | 国产在线观看每日更新 | 欧美日韩国产伦理 | 国产成年码 | 蜜柚视频在线观看免费完整 | 国产精品理论片在线观看 | 国产精品日韩专区一区二区 | 亚洲v欧美v国产v在线观看 | 大香伊蕉在人线国产最新75 | 凹凸国产熟女精品视 | 精品国产亚洲第一区二区三区 | 99视频在 | 亚洲欧美另类日韩综合 | 国产一级婬片a视频免费观看 | 欧美日韩在线免费观看 | 亚洲日本aⅴ精品一区二区在线 | 手机高清热播韩剧美剧电视剧 | 正在播放国产真实哭都没用 | 日韩一区二紧身裤 | 欧美日韩视频综合一区无弹窗 | 麻花豆传媒mv在线观看网站 | 国产老熟女一区二区三区 | 亚洲日韩aⅴ在线视频 | 亚洲欧美日韩中文字幕在线一 | 欧美亚洲国产清纯综合图区 | 国产亚洲成aⅴ人片 | 区三区在线 | 亚洲精品在线网址 | 欧美性做爰又大又粗又长 | 日日摸夜夜摸人人看 | 国产91精品夜未央! 中文字幕在线免费看线人 国产精品a | 欧美激情视频一区二区三区免费 | 亚洲天天更新 | 国产精品无 | 国产91高清免费 | 国产日韩在线观看一区二区三区 | 国产精品免费中文字幕在线观 | 日韩专区在线观 | 国产日韩欧美在线一区 | 国产亚洲一区激情小说 | 日本一区二区三区在线观看入口 | 成人午夜福利片 | 国产午夜男女爽爽爽爽爽视频 | 91大片淫黄大片在线天堂 | 韩国午夜福利片在线观看 | 欧美日韩中文字幕在线观看 | 国偷自产一区二区三区蜜臀 | 久操免费在线 | 亚洲精品欧美二区三区中文字幕 | 日本特黄特色免费亚洲日本 | 国产亚洲欧美日韩在线观着 | 欧洲乱码卡1卡2在线 | 欧美黑人疯狂性受 | 在线日本妇人成熟免费 | 日韩免费精品一区二区三区 | 亚洲春色在线观看 | 最近免费中文mv在线字幕 | 亚洲人成网站免 | 亚洲欧美综合图 | 日本96在线精品视频免费观看 | 国产老妇伦国产熟女老妇高清 | 欧美αv国产αv亚洲αv | 欧美777 | 337p日本欧洲亚洲 | 92国产精品 | 国产一级婬片a视频免费观看 | 天美麻花星空免费 | 日本xxxx高清色视 | 91最新精| 午夜亚洲国产理论片二 | 成人免费高清观看在线 | 性xxxxx欧美 在线观看一级亚洲欧美观看 | 免费高清电影在线播放 | 国产亚洲福利精品一区二区 | 日韩国产亚洲精品制服另类 | 97电影网 | 国产不卡福利 | 成人午夜在线i免费观看 | 亚洲国产亚洲片在线观看播放 | 999电影网 | 国产一区二区在线视频播放页 | 国产欧美视频综合二区 | 不要钱不用登陆的污直播 | 偷窥清纯综合图区 | 又大又粗又硬又黄的免费视频 | 中文日产乱幕九区无线码 | 国产精品黄在线观看免费网站 | 91每日更新视频在线观看 | 一区二区三区高清视频国产女人 | 国产暴力强伦轩1区二区小说 | 欧洲在线观看 | 国产一区二区三区精品观看啪 | 亚洲国产一区二区三区亚瑟 | 欧美一级国 | 国产精品va在线观看超清 | 日韩欧美中文字幕 | 亚洲欧美国产日韩精品在线 | 日韩欧美极品在线播放 | 亚洲国产丝袜一区二区 | 国产美日韩精品一区二区在线观看 | 欧美va免费大片 | 欧美xxxx做 | 加勒比一本大道香蕉大在线 | 国产乱人视频免费观看 | 国产盗摄xxxx视频xxxⅹ | 亚洲一区二区国产日韩欧美 | 国产精品亚洲а∨天堂网不卡 | 亚洲最大激情中文字幕 | 欧美极品欧美日韩 | 国产在线观看免费观看不卡 | 短视频在线下载免费 | 噼里啪啦hd免费观看动漫 | 国产亚洲免费在线观看 | 成年免费大片黄在线观看岛国 | 国产欧美日韩在线观看影院 | 国产日韩视频在线观看 | 成人激情在线 | 国产凸凹视频一区二区 | 最好看中文字幕国语电影 | 成人动漫在线播放一区二区 | 日本成人一a级黄 | 国产一区二区真实艹逼视频 | 欧美熟女激情视频 | 国产精品亚洲а∨天堂网 | 日本人妖| 日韩一区二区不卡中文字幕 | 欧美日韩综合免费视频 | 搡老女人露脸 | 成年女人免费永久看片 | 日韩天堂在线专区 | 三年片在 | 亚洲成aⅴ人的天堂在线观看女人 | 日韩老熟女一区二区 | 一区二区三区在线观看免费 | 国产精品日韩一区二区三区 | 亚洲高清成人动 | 欧美日韩亚洲第一区 | 午夜dj视频在线观看免费 | 综合精品欧美日韩国产在线 | 免费的高清影视网站 | 国产精品毛毛在线播放 | 国产片+人+综合+亚洲区 | 亚洲欧美激情精品一 | 日韩a级片在线观看 | 18视频免费网址在线观看 | 国产偷人视频在线观看 | 国产在线拍偷自揄拍精品 | 精品国在线观看视频在线播放 | 国产真人做爰免费视频 | 日韩大片高清播放器 | 精品国产91乱码一区二区三区 | 亚洲五月六月丁香激情综合 | 国产添下面视频全过程教程 | 欧美日韩网 | 一区二区日韩国产精品 | 亚洲一级淫片免费在线观看 | 国产乱肥老妇精品视频 | 91精品乱码一区二区三区 | 欧美亚洲性爱综 | 国产网站 | 国产欧美日韩在线视频观看 | 国产午夜福利在线播放 | 成人午夜爽爽 | 录音电话| 欧美精品系 | 韩国精品一区二区三区在线 | 1024香蕉国 | 亚洲国产剧情中文视频在线 | 亚洲卡一卡二卡三乱草莓 | 亚洲中文字幕高清有码在线 | 国产福利在线观看片 | 中文亚洲成a人片在线播放 神马午夜电影网手机在线播 | 野花日本完 | 亚洲欧美日本a∨在线观看 国产精品成人va | 欧美日韩国产综合另类在线 | 国产在线一区二区综合免费视频 | 三年片在线观看大全中国 | 国语自产精品视频熟女 | 在线观看国产三 | 99亚洲中文字幕精品一区二区 | 精品一卡2卡三卡四卡乱码 国产一区二区在线观看网站 | 国产天堂网一区二区三区 | 97韩剧| 国产高清视频在线播放 | 最近2025中文字 | 久热爱精品视频在线 | 日韩免费电影网站 | 中文字幕精品亚洲无线码一区应 | 被强视频在线观看 | 日本老司机午夜福利在线免费 | 亚洲日韩欧美国产精品共 | 中文精品久| 国产欧美一级精品 | 欧美日韩中文字幕在线琳琅 | 在线免费视频成人 | 国产亚洲成?v人在线观看导航 | 国产厨房一区二区三区 | 精品国产日韩亚洲一区在线 | 国产精品最新资源在线 | 男子操性感黑丝美女视频 | 99这里都是精品重查 | 国产在线观看h尤 | 自拍偷拍欧美图片 | 亚洲经典日韩欧美国产一区 | 97碰碰碰成年免费视频s | 蜜桃盗摄精品一区二区三区 | 国产亚洲午夜高清国产拍精品 | 国产亚洲精品国产91 | 欧洲激情网 | 日韩视频观看一区二区 | 欧美一区二区三区视频在线 | 豆奶app官方网站 | 国产一级淫片免费播放 | 亚洲色精品一区二区三区 | 国产精品一级国产精品片 | 喷水30分钟 | 日产精品卡二卡三卡四卡乱码视频 | 欧洲+日本+中国 | 日韩精品中文字幕在线观看 | 旋复花7799电影 | 国产真实乱人视频在线看 | 视频在线观看一区 | 国产亚洲高清不卡在线观看 | 肥女巨肥巨大黑毛 | 日本妇人成熟免费视频 | 国产亚洲精品自在在线观看 | 在线免费视频成人 | 国产精品宾馆在线精品酒店 | 乱伦日本影视国产 | 国产在线不卡免费高清dvd | 日韩欧美一区二区三区中文精品 | 末发育娇小性色xxxx | 88国产经典欧美一区二区三区 | 国产在线观看免费人成视频 | 大香伊蕉在人线国产最新75 | 亚洲色精品视频 | 日韩另类在线综合国产 | 精品国夜夜区二一区三区 | 国产午夜福利在线观看红一片 | 国内精品视频在线播放 | 日韩欧美在线视频 | 国产精品成人自拍在线观看 | 1000拍拍拍无挡| 国产剧情精品v国产在线观看 | 国产人成精品一区二区三区 | 国产视频一区二区三区四区在线 | 国产极品美 | 日本精品一区二区三区 | 日本中文字幕乱码专区 | 秋霞伦理电影在线看 | а√天堂网www在线搜索 | 视频试看| 日本成人一区在线 | 国产精品主播一区二区 | 欧美人与动牲猛交a欧美精品 | 国产妇女性爽视频免费 | 国产精品精品 | 国产精品va在线 | 91大片淫黄大片.在线天堂 | 日本精品中文字幕阿v免费 日韩精品亚洲精品第一页 视频在线播放在线观看 | 国产欧美日韩 | 亚洲日韩天堂在线 | 天天看片在线观看 | 45分钟无遮掩免费完整版高清 | 日本中文字 | 国产韩国日本欧美在线观看 | 国产欧美自拍偷怕日韩亚洲 | 永远免费观看 | 丁香九月月小说图片区 | 日本高清视频网址 | 99这里只有精品在线观看视频播 | 欧美亚洲一区二区三区 | 国产偷窥女洗浴在线观看亚洲 | 日本欧美综合观看 | 国产日韩欧美制服一区二区 | 另类视频一区二区三区 | 免费观看又黄又硬又爽的视频 | 一区二区三区在线观看视频 | 国产精品xxxx国产喷水 | 亚洲一区二区偷拍第一页 | 办公室系列欧美精品 | 青草青草久热精 | 午夜三级三级三点在线 | 欧洲影院网 | 国产精品小说 | 日本一区二区免费在线播放 | 亚洲国产区中文在线观看不卡 | 去卫生间啪到腿软 | 欧洲亚洲偷自拍第一页 | 亚州成人高清国产a | 日本a∨精品一区二区三区 亚洲s色大片在线观看 | 两个人的视频www中文 | 欧美精品视频一区二区三区 | 欧美网址在线观看 | 国产亚洲欧美在线播放 | 日韩一级香蕉片在线观看 | 天美麻花果冻 | 国产精品成人h片在线 | 精品日本一区二区三区在线 | 国产精品亚洲va在线观看 | 涩色亚洲激情第二页 | 欧美日韩女优在线 | 国产美女一区二区三区 | 91探花视频| 日韩一区高清在线观看 | 国产精品福利尤物youwu | 亚洲国产欧美在线观看 | 热门电影电视剧短剧免费在线观看 | 亚洲国产综合精品一区 | 妇女偷汉对白视频 | 一个人看的视频在线观看www | 国产9.1国产精成人 办公室第1季9集在线观看 | 最近日本中文字幕免费完整 | 日韩亚洲制服欧美综合 | 日韩精品在线免费观看 | 日韩一区二区高清视频免费在线 | 欧美午夜一区二区三区 | 国产高清在线观看视频 | 欧美精品亚洲 | 免费国产又色又爽又黄的视频 | 国产精品乱码高清在线 | 另类熟女伦乱视频 | 国产一区二区在线观看网站 | 国产欧美一区三 | 91神马电 | 日韩不卡高清区二区三区 | 天下第一日本在线观看视频 | 国产真人做爰免费视频 | 在线第一页| 欧美性一区二区三区 | 日本一区二区三区三区在线观看 | 国产a∨天天免 | 国产干b| 日产精品卡二卡 | 91国内揄拍国内精 | 国产婷婷高清在线视频站 | 免费国产一区二区8x | 欧美日精品一区二区在线观看 | 乱码视频午夜在线观看 | 起碰97在线视频国产 | 国产电影手机在线观看黄 | 亚洲精品一区二区三区人妖 | 97视频在线观看这里只有精品 | 亚洲一区二区三区香蕉下载 | 亚洲一区日韩高清中文字幕亚洲 | 337p亚洲 | 朝鲜女人大白屁股ass | 欧美在线a | 一区二区三区免费在线观看视频 | 午夜激情视频三区在线 | 区二区视频在线观看 | 日韩在线免费播放 | 国产精品好好热在线观看 | 日本色淫特级视频网站 | 半岛影院一级真人片 | 国产精品美脚玉足脚交 | 黑人巨大精品欧美一区二区一 | 中文字幕在线看片 | 国产精品亚洲欧美大片在线看 | 青草青草久热精品视频在线观看 | 日本精品a在线观看 | 日韩精品亚洲春色欧美激情 | 在线日本高清不卡免费v | 国产又黄的a级鬼片在线观看 | 欧美在线视频一区 | 国产精品欧美亚洲 | 欧美亚洲综合一区 | 国产高清www免费视频 | 国产日韩欧美一级视频在线观看 | 国产台湾佬国产娱乐 | 国产精品美妞一区二区三区 | 午夜伦伦| 在线观看日产一区二区三区 | 亚洲aⅴ在线无 | 亚洲欧洲精品视频 | 色两性网欧美 | 欧美日韩高清国产aⅴ一区 四区免费视频 | 欧美精品aⅴ一区二区三区 免费中文字幕不卡视频 | 欧美精品在 | 国产小视频在线免费观看 | 成在线人视频免费视频 | 国产精品精品二区 | 国产免费观看激情 | 日本三级欧美三级人妇视频黑 | 国产免费h视频在 | 日韩一区二区三区四区 | 亚洲日韩天堂网中文字幕 | 九九热这里只有精品在线观看视 | 日本不卡免费中文变态 | 欧美日韩不卡视频合集 | 亚州精品一区二区三区 | 精品日本免费一区二区三区 | 国产在线精品一区二区三区直播 | 欧美亚洲国产中文字幕 | 欧一美一性一交一乱一性一 | 国产玖玖玖视频在线播放 | 日本人視頻網站一 | 国产日产一区二 | 国产日韩欧美综合网站 | 国产高清精品在线中文字幕 | 日本1区二区三区公司 | 蜜桃国产在线观看网址 | 99精品视频观看国产金尊播放 | 欧美激情一区二区三级高清视频 | 国产一区二区三区欧美亚洲 | 日韩亚洲制服欧美综合 | 日韩在线观看中文字幕一区二区 | 亚洲成a人片在线不卡 | 国产欧美日韩综合精品一区二 | 国产电影免费一产二产 | 欧美午夜片在线观看 | 日本三级欧美三级人妇视频 | 国产高清亚洲美女精品图片91 | 日本免费一区日本一大免费高 | 欧美日韩一区二区三区中字幕 | 三级国产短视频在线观看 | 日本a级精品一区 | 一区二区影院 | 香港三日本三级人妇三级99 | 国产一区视频在线播放 | a级国产电影在线观看 | 国产精品日产三 | 国产在线观看成人 | 99亚洲自偷自拍图片区 | 91精品亚洲欧美日韩在线 | 国内国外日产一区二区 | 国产大片黄在线观看 | 国产午夜在线精品 | 国产又色又爽又黄刺激91 | 国产亚洲中文日韩欧美 | 九一国产精品视频 | 亚洲中文精品视频在线 | 欧美蜜桃臀在线观看一区 | 欧美日韩国产精品酒 | 欧美综合图片 | 521a成v视频网站在线入口 | 日韩欧美精品在线观看视频 | 国产中文视频一区在线 | 九九免费福利精品视频 | 日韩欧美亚洲—区精选 | 亚洲综合一区国产精品 | 亚洲国产一区在线观看视频 | 日本电影一区二区三区 | 欧美日韩国产在线观看 | 国产成年女人 | 亚洲国产的精品太乱码一区二区 | 国产二区丝袜在线观看 | 国产精品码一区二区 | 污污视频软件下载 | 国产拳头 | 播放日韩| 国产亚洲欧洲精品 | 午夜理论片在线观看免费 | 久这里只有精品国产66热99 | 日韩一区二区三区电影成人 | 欧美另类第一页 | 国产高跟鞋丝袜在线观看 | 日日摸夜夜添夜夜添特色大片 | 国内一点不卡在 | 精品国产a自拍 | 免费精品99久 | 日产影视剧影视大全 | 日本大香伊蕉一区二区 | 国产在线播放成人免费 | 999精品视频 | 日本亚洲洲精品码无无专区 | 热搜电视剧在线观 | 国产一级特黄aa大片免费 | 精品乱码一区二区三区四区 | 免费影视资源 | 国产亚洲精品精华液 | 国产一区精品理论片在线观看免 | 小说区亚洲综合第1页 | 国产精品高清全国免费观看 | 日韩一区二区三区四区电影 | 日本色免费一区二区 | 手机看片福利一区二区三区 | 国产欧美日 | 亚洲偷自拍另类图片二区 | 国产wwwww | 精品亚洲精品中文字幕乱码 | 精品免费看国产一区二区 | 亚洲二区中文字幕 | 91日本免费高清 | 亚洲理伦精 | 国产亚洲欧美在线播放 | 国产黄大片在线观看画质优化 | 中文字幕国产第1页直播在线 | 亚洲成a人v欧美综 | 亚洲国产精品一区二区www | 欧美日韩激情播放 | 国产热门视频在线播放 | 巨爆中文字幕巨爆区 | 国产自产一区二区三区视频在 | 上司揉捏人| 亚洲一区自拍视 | 欧美精品一区二区电影 | 亚洲欧美| 91中文字日产乱幕 | 一起碰一起噜一起 | 亚洲免费精品一二三四 | 成人啪精品视频网站午夜 | 亚洲性影院在线看 | 日韩草莓视频一区二区在线 | 免费国产在线观看 | 国产一区二区熟女精品免费 | 日产国产欧洲系列 | 日本性xxxx| 日韩综合在线欧美中文字幕 | 亚洲精品视频免费 | 国产精品网站永久免费99 | 手机午夜福利1000视频 | 亚洲日本一区二区 | 国产老肥熟一区二区三区 | 亚洲一区有码 | 午夜免费福利 | 国产情侣在视频 | 国产日韩综合在线视频 | 欧美激情视频在线观看 | 精品欧美一区视频在线观看 | 香蕉免费啪 | 手机免费看一级 | 国产91中文在 | 免费国产黄频在线观看视频 | 色色www | 最新电影免费在线观看 | 手机在线看片 | 国产精品偷窥熟女欧美激 | 最新国产精 | 国产精品人一成在线观看 | 日本视频在线免费 | 在线亚洲高清揄拍自拍一品区 | 国产精品一区二区不卡 | 国产欧美日韩精品综合在线 | 欧美亚洲日韩一区二区三区中文 | 最近中文字幕大全 | 国产盗拍精品视频 | 日韩欧美亚欧在线视频 | 国产乱码精品在线播放 | 国产日韩欧美3atvcom | 欧美日韩综合精品网 | 亚洲日本在线不卡 | 欧洲日韩极速播放 | 女同视频在线观看网址 | 福利一区二区 | a一级农村片 | 综合狠狠 | 日韩制服丝 | 国产欧美综合在线一区二区三区 | 欧美日韩亚州在线 | 国产亚洲精品a在线观看 | 一起碰一起噜一起 | 欧美激情人成视频在线观看 | 亚洲国产综合在线观看不卡 | 经典大片电影免费在线观看 | 国产91色在线综合亚洲 | 国产在线精品免费一区 | 欧美一区二区三区视频在线观看 | 国产爽片大全免费在线观看 | 午夜男女| 欧美高清一级 | 欧美一级日韩国产 | 欧美高清一区二区三区欧美 | 国产精品成人ⅴa在线观看 俺去啦不卡 | 国产精品日韩欧美一区 | 日本亚欧乱色2025视频 | 97久视频精品视频在线老司机 | 欧美日韩每日更新 | 日韩欧美一区二区三区免费 | 欧美性色aⅴ欧美综合色 | 国产在线精品国自产拍影 | 性生大片免费观看性 | 好吊妞在线视频免费观看综合网 | 在线播放国产不卡免费视频 | 国产精华液和欧美的精华液 | 日本在线观看免费高清 | 成年福利片在线观看 | 亚洲精品老司机综合影院 | 日本一线二线三卡四卡区别 | 片免费看 | 国产羞羞羞视频在线观看 | 国产mv在线观看免费 | 中文字幕精品亚洲一区 | 欧美日韩精品福利 | 91成人免费观看在线观看 | 国产日韩精品a | 日本一级淫片a免费播 | 国产模特精品私拍在线 | 另类综合视频在线 | 亚洲—本道中文字幕 | 福利影院 | 日韩欧美一及在线播放 | 国产永久在线观看 | 亚洲午夜视频在线 | 国产日韩欧美综合一区 | 99热视热频这里只有精 | 午夜视频免费观看 | 日韩精品成人一 | 日日摸夜夜添欧美一区 | 日韩一本之道一区中文字幕 | 日本怡春院欧美一区二区三区 | 99ri国产一区在线观看 | 成全世界免费高清观看 | 7799天天综合入口精品 | 国产在线观看网站 | 愉拍自拍一区首页 | 五十路丰满中年熟女 | 肥臀熟女一区二区三区 | 97国产在线看片免费人成视频 | 最新好看的影视大全在线观看 | 亚洲色成人影院在线观看 | 国产精品视频免费网站 | 国产最新精品盗摄视频 | 日韩熟女精品影院 | 日本国产中文字幕 | 一区二区三 | 激情婷婷| 亚洲一区二区三区四区 | 国产主播福利 | 无人区码一码二码三 | 精品亚洲欧美无人区乱码 | 久青青视频在线观看久 | 欧美精选在线观看 | 69老司机午夜免费 | 播放国语介绍动漫更新视 | 成人一区二区三区高清视频 | 国产精品人人 | 日韩精品人成在线播 | 欧美日韩国产另类精品图二区 | 国产日本欧美亚洲精品视 | 欧美一级视频在线观看欧美 | 国产日韩欧美女同一区二区 | 特级西西| 国产精品视频在这里有精品 | 4hu影视| 国产一区二区三区精彩视频 | 国产系列欧美系列每日更新 | 国产日韩欧美3atvcom | 国产精品视频第二区第二页 | 国产精品五月天 | 女人喷液在线观看免费 | 天天影视色 | 国产不卡一区 | 99老司机精品视频在线观看 | 国产日韩欧美第二页 | 永久精品免费影院在线观看网 | 人人添逼人人摸人人 | 91欧美尤物精品 | 国产对白普通话视 | 亚州一区二区三 | 成人一在线视频 | 亚洲欧美日韩高清综合678 | 国产乱码精品一区二区三区小说 | 日韩一区二区三区免费高清 | aⅴ不卡国产在线观看 | 中国在线观看免费国语版 | 亚洲国产日韩欧美视频一区 | 99视频有精品视频在线观看 | 国产精品五月天 | 欧美国产亚洲一区二区三区 | 成人乱码 | 国产日韩欧美亚洲精品中字 | 国产亚洲日韩欧美一区二区三区 | 午夜自产精品一区二区三区 | 国产高清中文字幕 | 国产激情一区二区三区小说 | 国产色爽免费视频 | 欧美人成在线观看网站高清 | 人人鲁人人莫人人爱精品 | 欧美自拍另类综合专区 | 91精品视频免费在线观看 | 99亚洲国产综合一区二区 | 真实的国产乱xxxx在线 | 日本一区二区视频在线观看 | 日韩欧美在线视频一区二区 | 国产拍偷| 国产乱理论片在线观看免费 | 国产在线观看福利片 | 国产精品精品二区 | 免费亚洲国 | 最好看的高清电影在线观看 | 日本午夜福利剧场 | 蜜桃网站入 | 好吊色在线免费 | 91影视永久福利免费观 | 黑人巨大精品欧美一区二区免费 | 香蕉有码在线视频发布 | 日本三级全黄 | 日韩高清在线二区 | 国产伦精品一区二区三区 | 懂色中文一区二区在线播放 | 91黑料吃瓜在线观看 | 免费看国产精品3a黄的视频 | 成人亚洲偷自拍色 | 蜜桃臀無碼內射一區二區三區 | 国产午夜福利在线播放 | 精品国产亚洲人成在 | 91精品视频在线免费观看 | 精品熟女视频一区二区三区 | 国产日韩亚洲不卡高清在线观看 | 国产精美视频 | 国产精品亚洲第一区不卡原创 | 99精品国产兔费观看66 | 爱城亚洲区| 国产一区二区三区激情四射 | 色一情一乱一乱一 | 欧美色五月婷婷黑人 | 亚洲欧美国 | 亚洲免费在线观看一区二区 | 国产日韩欧美亚洲综合 | 99国产综合视频在线播放 | 字幕一区精品自拍 | 精品含羞草免费视频观看 | 激情97综合亚洲 | 不卡中文字幕系 | 欧美精品午夜 | 国产口爆 | 国产又滑又嫩又白 | 日韩精品武 | 熟女一区中文字 | 拍国产真 | 凶猛办公室高清未删减 | 欧美精品aⅴ一区二区三区 免费中文字幕不卡视频 | 日本高清一区二区三区水蜜桃 | 精品午夜日韩 | 全集高清免费的影视剧在线观看 | 亚洲视频偷拍视频2亚 | 大又大又粗又硬又 | 日韩在线成年视频人网站观看 | 国产乱码日产精品bd | 国产高清不卡一区二区三区 | 日本爽p大片免费观看 | 欧美日韩中文字幕一区二区三区 | 最新亚洲 | 国产又色又爽 | 成人一区在线观看 | 欧美经典日韩精品 | 99在线精品视频在线观看 | 成人永久免费 | 性夜夜夜夜夜夜爽 | 国产精品色内内在线播放 | 国产美女一级a视频欧洲 | 国产的精 | 一级风流片a级在线播放 | 中文字幕久热精品 | 樱花动漫网站官网 | 亚洲欧美精品一区二区 | 国产大片免费观看 | 国产午夜福利精品探花 | 老熟女乱一区二区三区视频 |