国产自产第一-国产自产对白一区-国产自产精品-国产自产区44页-国产自产在线-国产自产自拍-国产自产自拍视频-国产自精品

金喜正规买球

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白丝后入 | 91亚色| 日韩亚洲欧美一区 | 国产不卡福利一二三区 | 加勒比人妻无码专区 | 欧美性爱在线 | 成人国产精品高清在线 | www.国产成人| 激情五月婷婷 | 日韩一级在线 | 午夜福利导航在线观看 | 国产又大又粗又爽视频 | 国产成年网 | 精品一二三 | 日韩在线观看欧美尤物 | 日韩a优精品在线观看 | 韩国无码无遮挡 | 黄色三级网站 | 日韩成人在线视频 | 日韩精品观看 | 成人影院中文字幕 | 91原创视频 | 亚洲卡一卡二在线观看 | 日本免费黄色小说 | 日韩综合欧美 | 婷婷五月激情视频 | 第一色网| 麻豆AV电影 | 日韩视频一区二区 | 超碰人人操人人干 | 福利姬视频免费 | 国产精品视频 | 成人影院 | 成人午夜无码视频 | 成人精品第一区国产 | 日韩系列 | 97超碰人人操人人干 | 日韩高清在线观看 | 另类图片激情小说 | 传媒精品入口 | 三级毛卡片免费看 | 国产91丝袜高跟系列 | 国产性爱在线观看 | 日韩亚洲制服欧美综合 | 老湿机试看 | 日韩中文在线 | 性爱在线观看 | 深夜成人福利在线 | WWW97干| 精品动漫一区二区 | 黄色毛片网站 | 91网站国产 | 91丨熟女丨对白 | 人妖专区 | 浓毛熟女X66AV | 性欧美xxxx| 国产一区视频在线 | 日韩娇小性hd | 日韩人人全干 | 日韩国产欧美亚洲一区 | 成人午夜在线免费观看 | 国产免费区| 日韩欧美精品在线观看 | 国产三级片大全免费 | 福利欧美日韩精品国产 | 日韩精品高清无码 | 午夜婷婷 | 日韩专区亚洲精品 | 加勒比精品在线 | 日韩精品免费一级视 | 午夜福到| 日韩国产二区不卡在线 | 日韩精品中文字幕 | 日韩欧美综合一区 | 国产91导航| 情侣无码 | 国产xxx在线观看 | 婷婷激情五月 | 日韩成人激情 | 国产无码小说 | 日韩女神福利在线观看 | 久久sao| 蜜桃臀久久久蜜桃臀 | 91视频色色| 国产精品不卡 | 国产免费三级永久免费 | 国产精品三级A | 免费污网站在线观看 | 在线成人三级 | 自拍偷拍第六页 | 超碰人人操 | 午夜成人视频免费看 | 日韩在线视频二 | 福利姬视频免费看 | 日韩性受 | 国产αv在线 | 成人不卡在线 | 日韩伦理在线播放 | 国产a不卡片 | 岛国精品在线观看 | 国产TS变态重口人妖 | 国产成人免费观看 | 日韩国产二区 | 国产白拍 | 老熟女毛茸茸 | 人妻系列无码 | 亚洲国产精品在线观看 | 色哟哟一中文字幕 | 日韩欧美国产完整版 | 无码动漫一区二区 | 日本韩国欧美中文字幕 | 久久国产综合精品 | 日韩av网址大全 | 日韩二级片0 | 狠狠干天天操 | 丁香婷婷六月 | 日韩视频在线播放 | 国产精品第四页 | 五月婷婷天| 国产裸体视频 | 亚洲卡一卡二在线观看 | 男女激情视频网站 | 婷婷激情综合 | 三级在线成人 | 亲子伦一区二区三区 | 国产一卡二卡在线 | 国产一区二区久久精品 | 亚洲视频1 | 亚洲色图1| 国产人妖视频专区 | 欧美ab| 尤物视频入口 | 国产美女被干 | 国产性爱一级 | 日韩免费一二三四区 | 日韩免费高清专区 | 日韩情网 | 玖玖爱www| 午夜麻豆| 激情小说在线视频网 | 国产精品国产精品 | 久久精品视频2025 | 深夜福利日韩 | 成人三级片免费看 | 午夜成人电影在线播放 | 夜夜干夜夜看 | 日韩美女免费视频 | 日日夜夜精品视频 | 亚洲a片成人 | 三级成人网站在线观看 | 日韩国产在线观看 | 福利第一页 | 国产国产人免 | 福利小视频在线播放 | 五月婷婷 | 日韩成人AV网站 | 日韩午夜影院在线观看 | 91社区体验区 | 国产h片 | 日韩欧洲自拍视 | 日韩aⅴ在线观看国 | 国产三区四区五 | 国产精品传媒在线观看 | 日韩免费看视频 | www国产| 东京热污| 天天爽爽夜夜爽爽 | 免费三级在线观看 | 成人国产一区二区三区 | 国产精品HD| 日韩欧美国产中文字幕 | 日韩区一区二区三区四 | 日韩免费高清视频 | 日韩在线视频专区免费 | 日本黄色中文字幕 | 三级视频婷婷麻 | 日本另类人妖 | 亚洲国产精品精 | 成人福利视 | 人人妻日本| 91视频聊天 | 国产在线观看三级 | 欧美精品国产一区 | 国产麻豆免费 | 日韩影音 | 日韩午夜视频在线观看 | 超碰人人操人人干 | 无码电影网 | 超碰人人操人人 | 日韩国产欧美精品综 | 成人精品日韩亚洲专区 | 色情综合网 | 五月丁香免费 | 91外围| 久久久66 | 成人午夜试看 | 日屄视频在线播放 | 日韩在线免费看网站 | 日韩精品一线二线 | 国产精品国色综合久久 | 91玩游戏盒子 | 国产亚洲91 | 日韩69| 亚洲日韩国产成人另类 | 乱伦视频免费看 | 日韩在线视频中文字幕 | 日韩性爱网址 | 三级视频在线观看播放 | 国产拗女一区二区三区 | 国产高潮视频 | 99自拍偷拍视频 | 日韩高清片一二区 | AV第一福利大全导航 | 国产人妖视频专区 | 成人国产极品在线视频 | 深夜视频18+在线 | 91香蕉白丝 | 深夜免费小视频 | 涩涩在线视频 | 在线播放无码不卡 | 狼友视频精品免费播放 | 日韩亚洲一区中文字幕 | 东京99热这里精品 | 极品偷拍网 | 午夜视频网站 | 成人午夜精品视频 | 欧美三区| 福利姬免费观看 | 国产超级乱婬视频免费 | 激情文学之图片区 | 黄色网址在线视频 | 日韩综合在线视频 | 国产不卡网 | 成人无码大片在线观看 | 日韩国产免费一级 | 精品91| 午夜成人在线影院 | 爆操人妖 | 国产午夜伦鲁鲁 | 日韩国产欧美亚洲v片 | 国产福利电影 | 福利视频在线导航 | 国产视频第二页 | 日韩亚洲国 | 意大利熟女复古毛茸茸 | 国产亚洲精品 | 国产91精品成人不 | 国产精品飞一区 | 国产日韩Aⅴ片 | 日韩另类第一页 | 日韩美女在线观看一区 | 日韩成人一级 | 亚洲视频小说图片 | 三级影视午夜影 | 日本玖玖爱| 国产中文高清 | 日韩中文高清无码 | 国产乱子伦| 无码人妻又粗又大 | 欧美成在线 | 人妖网站国产 | 国产古装三级在线播放 | 国产三级视频在线播放 | 天美精东在线 | 精品狼友| 中文字幕精品久久22 | 国产三级在线观看 | 成人午夜高清在线观看 | 日韩高清免费在线观看 | 偷拍自拍视频在线 | 无码区国产区在线播放 | 国产精品自拍片 | 国产第一屁屁影院 | 日韩在线精品蜜柚影院 | 又黄又刺激的视频 | 日韩专区国产国产精品 | 黄片内射| 在线午夜| 在线视频福利 | 成人午夜福利在线播 | 国产精选自拍 | 午夜视频官网 | 国产精品免费一区二区 | 岛国电影网 | 福利导航在线观看视频 | 日韩免费高清 | 高清无码专区 | 另类专区快播 | 欧美精品涩涩瑟瑟 | 国产27页 | 日韩在线不卡免费视频 | 国产精品被艹 | 国产AV在 | 国产999久在线 | 日韩视频中文字幕 | 成人国产 | 人人超碰97狠狠摸 | 欧美三区在线 | 激情图片小说 | 日韩欧美网| 日韩另类第一页 | 二区在线视频 | 成人快播视频 | 成人午夜在线免费视频 | 91视频社区 | 日韩熟女高清精品专区 | 日韩欧美在线观看 | 乱伦中字 | 夜夜操天天操 | 免费A片成人 | 日韩欧美动漫一区二区 | 超碰人人艹 | 深夜欧美 | 国产精品自拍高清 | 日韩成人伦理 | 无码人妻丰满熟妇毛片 | 日韩精品欧美高清区 | 爆乳熟女一区二区三区 | 日韩xxxxx级| 在线观看三级网址 | 午夜黄色 | 国产中文字幕不卡 | 日韩欧美站 | 岛国无码av | 成人在线三级片 | 日韩国产综合在线视频 | 日韩美女舔大棒 | 蜜桃二区 | heyzo.com| 日韩精品视频免费观看 | 日韩桃色激情综合 | 久久精品这里只有精品 | 国产区成人 | 色五月丁香婷婷 | 日韩中文字幕理论在线 | 日韩无人区码卡二卡 | 欧美另类变态 | 国产三级播放 | 日韩综合在线欧美 | 日韩欧美www | 福利一区二区视频 | 日韩老女人 | 国产地址 | 国产最新精品 | 欧美不卡区 | 日韩欧美国产完整版 | 国产乱码精品一品二品 | 国产精成人品 | 91中文视频 | 国产在线国产 | 少妇高潮喷水溜白A片 | 国产三级精品在线观看 | 亚洲精品国产精 | 日韩在线视频一区二区 | 日韩福利一区 | 三级黄色毛片视频 | 日韩欧美电影在线 | 成人在线精品 | 成人在线观看一区二区 | 午夜视频福利网 | 日韩美女视频0 | 日本不卡一区 | 国产αⅴ在线高清视频 | www国产| 日本不卡一区在线观看 | 黄色av三级 | 日韩aⅴ在线观看国 | 成人免费视频 | 国产色色网 | 啪啪啪在线免费观看 | 成人免费黃色大片 | 成人综合小说图片 | 久久综合娱乐网 | 成人免费淫片视频观 | 日韩精品1 | 欧美缴情 | 无码极品 | 久草视频下载 | 日韩福利视颁精品专区 | 日韩福利网 | 玖玖在线视频免费观看 | 在线观看不卡无码 | 97超碰免费| 精品国自产拍在线观看 | 国产在线|中文 | 日韩中文字幕免费 | 国产乱人乱偷精品视频 | 超碰人人摸人人干 | 国产精品美乳在线 | 尤物视频网站 | 综合五月婷婷 | 欧美性爱视频网址 | 自拍偷拍第99页 | 日韩中文字幕欧美专区 | 成人免费高清在 | 深夜福利网址在线观看 | 国产黄色在线免费观看 | 免费无码不卡在线观看 | 日韩人妻一区二区三区 | 成人无码免费毛片 | 成人三级在线播放 | 自拍偷拍第7页 | 精品性爱在线 | 精品人妻二区中文字幕 | 日韩电影大全 | 性爱视频欧美 | 国产精品可站18 | 国产精品一区二区小说 | 日韩美女在线观看 | 亚洲一级二级 | 日韩乱码人 | 日韩亚洲中文午夜 | 东京热九九 | 蜜桃视频中文字幕 | 国产91精品成人不 | 日韩视频第二页 | 午夜色色男 | 国内自产自拍 | 日韩欧美国产完整版 | 久久精华-曲曲三曲 | 日韩高清无码一区二区 | 日韩色片 | 91自拍在线| 欧美成年网站 | 日韩美女在 | 日韩精品理论在线 | 日韩不卡1卡2卡三卡 | 一区二区在线 | 日韩男女做性高清在 | 国产一级做受视频 | 免费无码不卡在线观看 | 三级视频兔费看 | 东京热综合久久 | 一夜七次郎网站 | 日本不卡视频一区 | 久久这里只有精品资源 | 日韩性派对 | 欧美日韩高清在线 | 国产精品免费看 | 综合视频久久 | 成人xxxxx | 中文字幕在线观看不卡 | 91手机视频| 日本少妇xxx| 日韩丝袜美女 | 日韩欧美女人 | 玖玖热在线视频 | 五月丁香综合网 | 欧美成人在线视频观看 | 日韩无在线播放 | 韩国三级网 | 国产第一页在线观看 | 日韩国产欧美亚洲一区 | 日韩aⅴ手机在线 | 日韩视频在线免费观看 | 碰碰97| 国产第一页草草 | 在线国产三级免费 | 国产又粗又大又爽视频 | 日韩精品午夜视频 | 男女午夜精华 | 这里只有精品久久 | 三级片国产在线看 | 日韩理论网 | 成人免费看视频 | 黄色av三级 | 国产a不卡片 | 男女网站在线观看 | 成人免费观看在线看 | 成人三级毛片 | 国产不卡视频在线观看 | 玖玖国产| www.日| 日韩亚洲精品视频 | 老湿影院av| 国产大乳美女挤奶视频 | 九九九九九精品 | 日韩电影一区 | 91社在线播放 | 国产三级观看 | 成人三级免费观看 | 国产v综合v亚洲 | 亚洲性久久影院 | 日韩色综合 | 成人午夜福利网 | 干成人网 | 国产精品啪 | 日韩不卡一区二 | 狠狠插狠狠干 | 成人精品电影一 | 天堂资源在线观看 | 69老湿机 | 国产成人a毛片 | 国产91丝袜在线熟 | 婷婷丁香五月社区亚洲 | 午夜福利免费视频 | 国产成人三级 | 青青青草视频 | 久久这里只有精品高 | 东京热大乱w姦在线 | 日本色道xxxwww | 日韩国产欧美精品在线 | 午夜剧场色 | 尤物.com | 激情小说在线视频网 | 人妖奶水另类 | 日韩aⅴ在线观看国 | 日韩一级在线精品国产 | 真人性久久久 | 日韩不卡久久 | 性爱在线免费观看 | 日韩一区欧美激情 | 国产黃色a片三級三 | 都市激情综合 | 亚洲精品国产精品国产 | 夜夜干夜夜看 | 国产精品激情综合 | 日韩激情欧美 | 日韩经典电影 | 在线免费观看三级 | 日韩大片在线播放 | 麻豆国产在线 | 东京热高清无码视频 | 国产人妖视频 | 日韩第1页 | 在线免费视频一区二区 | 午夜伦理在线一 | 美女黄色18 | 国产福利第一页 | 极品无码| 日韩在线影院 | 人人操人人搞 | 成人福利夜色影视亚洲 | 日韩无砖专区一区 | 日韩精品国产高清 | 亚洲乱伦| 日本黄色小说 | 午夜色福利 | 久久免费看 | 福利国产 | 日韩中文字幕欧美视频 | 91综合| 久草免费资源站 | 欧美性爱在线观看视频 | 福利短片在线观看 | 日韩亚洲无码操操操 | 深夜福利视频导航 | 偷拍自拍视频在线观看 | 毛茸茸老熟女 | 日韩经典| 成人午夜精品视频 | 蜜桃传媒网址 | 综合久久一区 | 超碰人人干人人摸 | 玖玖视频免费在线观看 | 日韩黄色三级 | 成人国产一区二 | 一区二区传媒有限公司 | 国产一页 | 老司机天堂 | 日韩国产欧美综合网 | 日韩a级毛 | 香蕉久操 | 成人午夜又粗又硬又长 | 午夜福利在线影院 | 有看a片的网址吗 | 国产在线三级在线观看 | 人妻精品一区二区 | 三级成人片在线观看 | 日韩国产综合在线视频 | 日韩中文字幕在线视频 | 成人情趣网站 | www日本色清| 日韩免费一级 | 深夜福利视频免费 | 日韩国产高清视频 | 日韩色色资源站 | 日韩精品欧美视频 | 黄色网址免费看 | 国产高清1页 | 国产99视频精品 | 国产不卡网站 | 亚洲精品网站无码av | 日本黄页网 | 韩国激情无码 | 国产h片量多网站 | 亚洲人成人网站 | 日韩精品视频 | 91直播免费看 | 日韩精品视频一 | 国产在观| 午夜成人福利视频在线 | 国产精品热久久 | 精品自拍在线 | 午夜福利电影 | 自拍偷拍第33页 | 日韩欧美中字 | 无码成人午夜在线影院 | 国产91丝袜高跟系列 | 玖玖爱在线观看视频 | 国产精品自拍视频一区 | 国产精品92 | 性国产在线 | 日韩亚洲一区图 | 女同一区 | av天堂黄色 | 传媒精品入口 | 国产足交在线 | 午夜福利鸡 | 加勒比无码人妻 | 97看片| 日本资源网 | 国产第一屁屁影院 | 性在线免费观看 | 日韩视频网 | 日韩亚洲国产日本 | 日韩电影在线电影 | 免费三级网 | 亚洲AV第二国产精品 | h动漫无码| 日韩免费在线中文字幕 | 91丝袜在线视频观看 | 91一区二区三区 | 国产乱码精品一品二品 | 国产高清无码专区 | 日韩在线观看影院 | 免费污网站在线观看 | 四房色播激情五月 | 国产91 | 日韩另类视频 | 在线A片网址 | 国产ts视频 | 国产精品视频自拍 | 国产成在线观看 | 羞羞的网站| 午夜福利无码在线 | 日韩最新网站 | 日韩欧美理论在 | 欧美性爱综合 | 日韩成人午夜福利 | 亚洲无码卡一卡二 | 精品国产三级国产 | 日韩高清免费观看 | 成人图片小说网 | 国内外成人在线视频 | 自拍偷拍 | 国产亚洲日本 | 成人免费 | 日韩一区二区三区中文 | 日韩精品中 | 成人大全在线观看 | 日韩午夜在线 | A级片网站 | 成人免费观看三级片 | 国产三级在线观看网址 | 日韩激情综合 | 尤物在线视频 | 日本女同互慰 | 日韩丝袜性爱在线观看 | 91社在线观看 | 日韩三夜精品在线播放 | 色色图区 | 丁香五月天网 | 日韩精品不卡一区二区 | 激情文学图片区 | 日韩逼穴美女区欧美 | 91幅利视频| 日韩精品在线观看免费 | 国产www视频 | 福利色播| 97小视频| 日韩在线 | 日韩午夜看片 | 成人免费在线观看视频 | 97人人干人人操 | 日韩国产高清制服一区 | 夜色帮福利网 | 日韩无毒视频在线观看 | 日韩综合网 | 一级毛片中文字幕 | 日韩亚洲国产综合高清 | 欧美日韩视频 | 国产精品永久免费 | 三极网站 | 国产三区视频 | 无码不卡电影 | 国产视频午夜 | 日韩福利网 | 三级网站在线观看免费 | 成人在线三级片 | 人妻美臀| 国产成人精品国内自产 | 国产视频1区 | 午夜成人AV在线 | 黄片一级在线观看 | 男女操逼网站 | 国产中文字幕第一页 | 日韩丝袜清纯自拍 | 国产第3页 | 日韩黄色成人 | 丁香五月亚洲婷婷 | 久热思思 | 国产97在线欧洲 | 三级网在线 | 国产福利电影 | 亚洲7777| 日本.www.色| 国产四区 | 日韩专区亚洲国产精品 | 日韩欧美高清 | 在线视频天堂 | 一区二区三区伦理片 | 亚洲区视频 | 玖玖爱AV | 动漫精品一区二区 | 成人无码区免费AⅤ片 | 深夜福利免费在线 | 日韩v亚洲v欧美 | 日本不卡一区二区三区 | 日韩不卡免费视频 | 成人国产精品秘 | 国产夜精品| 成人午夜在线免费观看 | 欧美性爱www | 五月婷婷五月天 | 新天堂资源在线 | 日韩家庭乱伦视频网 | 三级网站免费 | 日韩免费人成看国产片 | 日本多毛熟女 | 欧美成人A视频 | 另类二区| 成人羞羞网站 | 狠狠操av| 日逼天堂 | 成人国产精品日本在 | 丁香激情网 | 精品午夜福利 | 日韩在线播放欧美字幕 | 成人国产精品秘片多多 | www五月天| 美日韩中文字幕 | 国产91丝袜在线18 | 日韩午夜影院在线观看 | 另类视频 | 日韩免费视频一一二区 | 极品少妇无码视频 | 丰满少妇在线观看网站 | 国产免费播放器 | 成人动漫免费视频 | 天美mv免费入 | 日韩日韩日韩日韩 | 性爱主播 | 日韩www视频 | 日本不卡一二区 | 日韩新片| 日本在线AA | 福利所视频导航 | 国产一区二区久久精品 | 91精品久久久久久 | 国产看片在线 | 午夜精品福利在线观看 | 在线观看视频一 | 中文字幕毛片 | 国产人妖另类 | 日韩一二三四精品免费 | 日韩精品1 | 黄色三级视频网站 | 国产黄大全 | 国产网站在线免费观看 | 午夜视频播放器 | 国产精品6区 | 秘密福利网址导航 | 精品国自产拍在线观看 | 日本一二三不卡 | 成人精品一卡二卡三卡 | 深夜福利免费 | 无码高清不卡在线 | 97伦理片| 午夜成人影视网 | 国产h片在线观 | 日韩成人影院 | 五月婷激情网 | 午夜国产| 日韩福利区 | 国产大片免费观看 | 午夜福利在线视频 | 在线观看日本黄色网址 | 国产久热香蕉在 | 日韩精品亚洲精品 | 日韩经典欧 | 福利视频导航福利 | 欧美视频性爱 | 久久本道| 日韩亚洲一区二区三区 | 日韩成人在线观看 | 日韩欧美偷拍 | 国产高潮白浆喷水 | 日韩在线免费观看视频 | 91视频播放 | 91丨九色丨国产在线 | 日韩欧美国产一级 | 天美传奇传媒mv观看 | 国产Ts人妖在线 | 日韩中文字幕观看 | 成人羞羞视频免费看 | 国产99视频精品 | 国内外成人在线视频 | 午夜国产| 日韩精东 | 日韩电影国产一区 | 福利资源在线观看 | 深爱五月激情 | 深夜福利在线免费 | 亚洲精品网站无码av | 成人永久福 | 欧美视频在线观看一区 | 日本黄色小说 | 三级成人网站在线观看 | 超碰在线人人操 | 18禁网站免费 | 日韩欧美一页综合区 | 日韩城人网站 | 色情一区二区三区 | 成人午夜福利在线 | 成人午夜福利100集 成人午夜福利 | 欧美操逼的视频 | 五月丁香亚洲综合 | 国产精品xxxx | 日韩欧美一区在线播放 | 偷拍综合 | 五月亭亭六月丁香 | 日韩手机在线 | 国产在线资源 | 性爱自拍第一区 | 一区不卡在线观看 | 日韩精品一二三四区 | 91香蕉导航 | 加勒比综合在线19p 加勒比综合在线 | 性欧美极品 | 欧美日韩二 | 日韩精品一级一区 | 日韩中文在线免费视频 | 成人精品一区在 | 国产盗撮视频在线观看 | 精品视频网 | 福利中文字幕最新永久 | 日韩国产一区 | 国产盗摄高清在线观看 | 国产在线精品国自产拍 | 日韩亚洲国产 | 成人国产射精a∨在线 | 亚洲精品国产精 | 在线免费视频一区二区 | 尤物精品在线观看 | 97超碰人人操人人干 | 日韩亚洲欧洲 | 午夜福利免费 | 韩日精品| 国产高清a | 日韩最新国产精品网站 | 婷婷五月影院 | 色77成人影院 | 国产成人不卡在线 | 97成人网在线碰碰碰 | 国产福利在线看 | 夜夜操夜夜操 | 四虎最新地址 | 成人免费视频国产免 | 国产色三线免费 | 国产肥老上视频 | 激情综合婷婷 | 伦乱视频| 麻豆AV电影| 另类图片激情小说 | 福利短片在线观看 | 日韩激情视频网站 | 三级片网址大全 | 人妖操伪娘| 日本能看xxx| 黄色网址在线观看免费 | 成人黄瓜视频 | 亚洲婷婷五月天 | 日本中文字幕中文 | 日韩电影app | 国产91专区 | 又黄又刺激的视频 | 国产夫妻片 | 成人国产电影 | 日韩成人大片在线观看 | 日韩无人区 | 国产超级乱淫片中文 | 日韩精品摩擦视频 | 午夜成人免费高清 | 国产污网 | 国产人成a | 韩国理论午夜 | 草草影院发布页 | heyzo无码| 91探花视频 | 国产精品92 | 日韩一级中文字幕 | 激情图片另类小说 | 国产91自拍| 日韩睡熟迷奷系列精品 | 屁屁影院第一页 | 国产宾馆在线观看 | 夜夜嗨一区二区三区 | 久久夜靖品2区 | 国产白丝喷 | 午夜成人高清视频 | 日韩精品国产原创 | 国产成人性爱在线观看 | 日韩玖玖爱 | 上床啪啪啪在线网站 | 成人精品无 | 国产第一页精品 | 福利姬秘入口 | 日韩欧美亚洲福利 | 经典一区二区三区 | 国产做受高潮在线观看 | 亚洲人成一区 | 午夜视频在线网站 | 韩国理论午夜 | 丁香五月影院 | 日韩欧美二区 | 成人福利午夜A片 | 中国三级片在线播放 | 屁屁福利影院 | 精品国自产在线观看 | 日韩欧美亚洲一区精品 | 午夜成人福利视频网站 | 99资源站| 91叉叉叉| 亚洲熟妇色 | 日韩资源网 | 无码不卡久久久久 | 国产精品精华液 | 日韩精品导航 | 丝袜中出制服人妻美腿 | 91视频下 | 天天操狠狠操 | 成人在线观看一区二区 | 三级片毛片网站 | 日韩国产精品 | 人人爱人人爽 | 日韩熟女中文字幕 | 久草资源部 | 日韩伦理一区 | 日韩视频二区三区 | 无码电影网站 | 激情文学图片区 | 久久这里只有精品6 | 国产精品suv一区 | 午夜福利a| 激情五月综合 | 嘛豆成人网址大全 | 日韩一级免费免费视频 | AV囯产AV| 日韩性视频在线播 | 国产高清超 | 成人国产亚洲 | 亚洲成成品网站 | 日韩电影伦理 | 欧美福利一区二区 | 免费成人a黄 | 91资源碰| 日韩欧美在线看片 | 中文字幕之久久 | 狠狠操夜夜操 | 日韩视频中文字幕 | 激情性爱自拍 | 欧美在线不卡视频 | 日韩欧美第一页 | 深夜福利在线看 | 午夜私人福利 | 嫖妓自拍视频 | www久久久| A级毛片免费在线观看 | 玖草在线 | 色屋网站 | 91网站免费观看 | 激情图片小说网 | 日韩欧美国内 | 日日不卡 | 91直播主播| 97爱爱爱| 成人午夜视频精品 | 深夜福利网站在线观看 | 九九这里只有精品 | 日本高清色www | 麻豆精东天美传媒 | 色五月视频 | 日韩欧美在现 | 成人性欧美 | 成人不卡在线 | 午夜精品视频 | 无码影院在线播放 | 国产区精品视频 | 日韩欧美高清免费 | 性欧美潮喷 | 国产a片网 | 国产日夜 | 日韩午夜中 | 中文字幕久久在线观看 | 麻豆秘精品国产免费 | 成人午夜二级一区二区 | 国产va一 | 欧美日韩三区 | 国产三级中文字幕 | 91原创| 日韩AV区 | 深夜福利大全 | 成人三级的片在线播放 | 欧美另类性 | 国产精品18在线 | 在线无码网 | 国产又黄又粗又猛又爽 | 东京成人热 | 日韩精品中文字幕 | 日本www在线 | 精品国产人妖 | 国产乱人伦无码视频 | 成人精品人成网站 | 午夜影院体验区 | 性欧美精品| 天美麻豆最新网址 | www.黃色| 成人国产精品一区二区 | 国产偷拍 | 国产极品人妖在线观看 | 日韩理伦片片在线 | 自拍偷拍自拍 | 成人国产精品日本在线 | 天夫干夜夜操 | 毛茸茸的老熟女 | 色播五月丁香 | 亚洲色片在线观看 | 在线免费观看三级 | 国产三级成人在线观看 | 激情另类文学 | 全免费A级毛片免费看 | 日韩欧美另类 | 在线观看A片网站 | 久草视频资源 | 重口熟女11p | 亚洲自拍国 | 成人a片免费网址 | 国产亚洲人成a | 四房色播婷婷网 | 成人日韩精品在线 | 最新版天堂资源在线 | 色屋网站| 免费日韩成人网站 | 亚洲国产成人免费 | 三级视频网站在线观看 | 最新欧美性爱 | 日韩一区二区三区电影 | 岛国免费在线观看 | 日韩欧美中文字 | 久久免费网 | 91视色| 日韩无码网站 | 国产女主播视频 | 国产99在线a视频 | 国产影视一区 | 日韩电影在线观看一区 | 国语自产 | 成人欧美一区在 | 97影视网| 午夜成人在线播放 | 欧美成年视频 | 日韩v片在线 | 久久国产精品张津瑜 | 屁屁影院导航 | 国产不卡视频一区 | 色五月激情综合 | 日韩精品极品视频 | 国产最新网址 | 日韩精品二区页 | 日韩一区精品视频 | 黄色一级免费观看 | 福利视频导航400 | 日韩午夜激情视频 | 制服丝袜家庭乱伦 | 国产v片免费播放 | 国产不卡免费 | 成人小说图片网 | 日操在线 | 日韩国产一区 | 国产又粗又猛 | 日韩欧美女人 | 激情视频小说网 | 日屄视频在线观看 | sm女牢| 成人免费一级A片 | 婷婷深爱激情网 | 91香蕉导航| 毛色毛片| 日韩精品一区二区最新 | 91伊人久久 | 国产无遮挡又黄 | 成人影院一区二区三区 | 日韩免费在线观看 | 日韩资源网 | 福利精品不卡高清 | 国产又粗又黄又爽又硬 | 操孕妇无码视频 | 国产自产精品一区精品 | 国产91九色在线播放 | 日韩欧美中文国产 | 国产成人综合精品 | 国产论理片| 久久麻豆浪潮av | 日韩在线一区高清在线 | 国产精品丰满人妻G奶 | 91自拍精品 | 玖玖爱精品在线 | 日韩欧美制服另类 | 色碰视频| 三级黄色毛片视频网站 | 成人精品综合免费视频 | 日韩午夜视 | 色情综合网| 激情小说免费视频 | 久久国产成人精品Av | 国产又粗又长又爽 | 午夜福利h| 在线观看深夜福利 | 日韩激情 | 欧美性爱欧美 | 国产乱码久久 | 午夜老司机福利 | 婷婷丁香五月在线 | 欧美精品在线观看 | 成人无码一级A片在线 | 三级精品国产 | 国产又粗又爽 | 日韩欧美福利电影在线 | 日韩精品免费看 | 国产91福利在线精 | 成人影院在线观看视频 | 久久久66| 国产黄色A片 | 无码午夜影院 | 国产91| 黄色三级网站 | 福利视频网导航 | 日韩欧美国产动漫在线 | 成人高清 | 日韩在线观看精品 | 天天日天天射天天爽 | 日本三级免费看 | 乱伦熟女视频 | 日韩欧美综合网 | 国产电影三级在线观看 | 五月婷婷激情综合网 | 日韩无码2025 | 97视频www| 成人免费看片又大又黄 | 另类在线1| 欧美日韩在线免费观看 | 中日韩高清无码 | 国产又大又黄又猛又爽 | 强奸乱伦首页 | 天天碰天天操 | 成人影片在线观看 | 国产高清乱伦片 | 老a影视精品无码视频 | 性做久久久久久久久 | 成人三级小视频 | 成人艳情一二三区 | 国产大片免费观看 | 中国操逼网 | 日韩丝袜精品二区免费 | 一区二区免费视频 | 日本精品人妻 | 日韩欧美第一二三区 | 91资源碰| 日韩国产欧美丝袜在线 | 人人看97 | 午夜草草 | 在线观看三级片国产 | 东京热无码视频 | 日韩伦理手机在 | 国产又大又粗又黄 | 天天日天天干天天日 | 日韩亚洲在线 | 午夜在线一区二区三区 | 久久精品国产99 | 老狼友视频 | 国产又粗又大又猛又爽 | 97色色影视 | 成人三级片电影 | 亚洲五月天婷婷 | 国产91精品视频网 | 三级av黄色| 中国一区二区精彩视频 | 国产高潮视频在线观看 | 玖玖色在线视频 | 国产爆乳美女娇喘呻吟 | 日韩欧美国产超级视频 | 日韩女同精品一区二 | 国产精品国产自 | 精品999WWW| 黄色链接在线观看 | 国产精品不卡网 | 国产欧美中文 | 日韩国产在线一区二区 | 午夜成人av在线观看 | 福利姬在线视频 | 久久这里只精品 | 日韩精品另类天天更新 | 丁香五月五月婷婷 | 午夜成人激情视频 | 狼人伊人干 | 日韩大片中文 | 日韩无码网站 | 成人a一区| 国产精品伊人 | 成人黄瓜视频 | 日韩精品青青精品视频 | 日韩欧美偷拍精品一区 | 综合五月 | 成人黄色免费 | 日韩不卡高清 | 五月婷婷丁香综合 | 午夜成人福利在线观看 | 岛国在线观看一 | 成人毛片在线免费观看 | 国产白丝在线 | 日韩色综合 | 福利视频网址导航大全 | 国产91高清精品 | 国产95在线 | 成人国产精品秘片多多 | 丁香五月网 | 国产一级大片 | 日屄视屏 | 成人免费观看男女 | 日韩无码丝袜 | 国产+中文 | 国产乱人伦无码视频 | 91天天在线 | 亚洲国产色情 | 午夜AV在线 | 国产99视频精品一区 | 国产99视频精品一区 | 日韩欧美日韩激情 | 日韩无砖专区一区 | 国产999精品视频 | 成人午夜婬片100集 成人午夜亚洲精品无 | 日韩换脸一区二区三区 | 不卡一区 | 自拍偷拍第9页 | 日韩性爱免费网站 | 国产在线无码播放 | 欧美视频亚洲视频 | 无码网站在线观看 | 日韩在线伦理片 | 91视频青娱乐 | 狼人一区 | 午夜福利成人 | 成人毛片在线免费观看 | 深夜小视频网址 | 日韩成人午夜福利 | 欧美一区视频在线 | 日韩午夜电影在线一区 | 日韩精品亚洲一区二区 | 三级视频吗 | 日韩精品新网在线视频 | 日韩欧美一区二区一幕 | 国产成人亚洲日韩 | 色综合2 | 国产性爱电影网址 | 性爱在线观看 | 尤物国产在线 | 午夜影视| 91网站大全| 国产成年女人毛 | 日韩欧美国产亚洲精品 | 日韩一区二区在线视频 | 强奸乱伦视频网 | 91香蕉国产线| 国产人妖一区 | 91九色国产| 福利视频网站导航 | 国产福利tv | 午夜黄福利 | 国产com| 激情文学综合网 | 日韩国产欧美制服中文 | 成人午夜精品福利免费 | 福利视频导航大全 | 天堂无码高清视频 | 日韩欧美国产第二区 | 成人午夜精品福利免费 | 四虎最新网 | www亚洲无码A片 | 涩涩av| 超碰人人草 | 97青青碰 | 国产麻豆高清 | www.日韩一区 | 婷婷五月激情网 | 美女三级黄色 | 国产aⅴ激情无 | 日韩a无v码 | 国产91精品新入口 | 日韩美女舔大棒 | 成人韩免费网站 | 日韩视频手机在线 | 欧美卡一卡二 | 成人深夜福利网站 | 日韩精品成人亚洲毛 | 屁屁影院欧美第一页 | 国产资源站 | 91最新视频 | 国产a一级| 麻豆精品在线免费观看 | 日韩欧美高清免费 | 99热99| 国产三级AV在线观看 | 尤物在线观看视频 | 国产ts人妖视频网站 | 91小仙女| 国产性爱AV | 福利手机电影 | 日韩高清在线观看 | 东京热九九 | 国产剧视频大全 | 人妖综合| 日韩一级二级 | 国产嫩草 | 三级成人免费 | 国产欧美国 | 日韩国产中文欧美 | 国产不卡电影 | 麻豆精东天美传媒 | 日韩成人激情视频 | 欧美偷拍一区 | 探花精品 | 亚洲美女爱爱 | 日韩精品第30页 | 日韩精品欧美高清区 | 日韩激情图片 | 日韩a在线观看免费 | 国产自精品在线 | 偷拍自拍网址 | 亚洲国产免费AV | 国产精品熟女久 | 国产爆乳美女娇喘呻吟 | 国产乱人伦 | 成人午夜在线看 | 日韩精品专区线上观看 | 麻豆秘做爱免费观看 | 亚洲国产三级在线观看 | 精品福利视频导航 | www.日本xxxx| 国产人成a | 乱伦中文视频 | 黄色网址免费看 | 福利在线欧美观 | 日韩福利在线观看 | 无码成人午夜电影免费 | 老牛影视国产精品 | 91午夜激情| 丁香婷婷在线观看 | 日韩在线不卡 | 午夜视频在线观看网站 | 国产自拍偷拍片 | 亚洲小说区图片区另类 | 国产高清无码在线 | 成人开心网 | 国产精品一区二 | 午夜精品视频网站 | 日韩欧美不卡 | 老司机午夜福利 | 日韩欧美亚洲范冰冰 | 日韩成人免费国产电影 | 国产又粗又硬又长又爽 | 丁香六月婷婷五月 | 国产又粗又黄视频 | 色福利网站 | 日韩精品一区二区三区 | 特黄视频 | 最新东京热网站 | 福利导航视频在线 | 中国人妖和人妖ⅩXX | 深夜福利视频免费看 | 自拍视频精品 | 日韩亚洲精| 午夜特片网 | 91手机自拍 | 精品人妻一区 | 日韩亚洲影院 | 在线麻豆视频 | 成人无码区免费AⅤ片 | 国产精品国产精品国产 | 亚洲天堂影院 | 国模冰冰一区二区 | 欧美日韩在线播放 | 日韩国产欧美中文综合 | 欧美午夜视频 | 亚洲小说区图片区另类 | 狼人伊人久久 | 丁香网五月天 | 日韩精品午夜0 | 日韩在线不卡 | 午夜成人资源 | 国产人妖在线视频 | 国产农村成人精品一区 | 日韩国产校园综合 | 日韩精品视频 | A片黄色网址 | 97爱电影| 国产三级片免费网站 | 性无码一区 | 午夜国产大片 | 国产va观看在线播放 | 国产精品自拍露脸视频 | 日韩国产精品视频 | 性国产在线观看 | 日韩欧洲a∨天码专区 | 成人福利视频导航 | 日本xxxx色| 一区二区三区动漫 | 欧美日韩网 | 日韩精品网站国产九区 | 日韩不卡在线视频 | 深夜福利免费看 | 久久资源综合网 | 国产精品92 | 福利姬视频在线看 | 成人做爰黄片免费看 | 日韩欧美国产亚洲中文 | 不卡的无码在线 | 成人免费视频国产免 | 国产不卡电影 | 伊人91| 国产中文字幕在线 | 日韩亚洲一区图 | 日韩亚洲欧洲在线观看 | 在线观看加勒比网站 | 日韩成人影视 | 美日韩精品 | 日韩欧美另类精品在线 | 在线观看视频一 | 国产人妖在线 | 日韩偶在线| 成人精品一区二区秒拍 | 做黄三级网站 | 日韩欧美~中文字幕 | 综合一二三久 | 成人性爱在线视频 | 免费在线观看污网站 | 日韩精品在线二区 | 日韩一区二区电影 | 三级在線日韩中文 | 国产精品萝莉 | 激情图片小说网 | 国产99视频精品专区 | 国产精品三级在线看 | 日本天堂资源 | 国产片在线播放 | 日韩亚洲视频 | 午夜成人无码精品福利 | 午夜成人看片 | 日韩娇小性hd | 久久精品爱 | 丰满少妇在线观看网站 | 91社中文| 国产精品成人XXX | 加勒比在线视频 | 人人干超碰 | 中文字幕――色哟哟 | 免费毛片中文字幕 | 色婷婷激情网 | 福利姬免费看 | 偷拍自拍第一页 | 字幕久久 | 国产福利在线 | 日韩家庭乱伦综合网 | 日韩在线观看一区二区 | 欧美另类重口味 | 天堂AV黄色 | 国产传媒 | 国产无码网站 | 日韩欧美st| 91亚洲| 黄色链接在线观看 | 欧美成人免费在线 | 国产精品福利影院 | 成人三级片电影 | 九色91| 日韩在线欧 | 欧美精品第一区 | 日韩高清不卡在线 | 欧美日韩精品一区 | 色97色| 福利区在线观看 | www,超碰| 黄wwwwww| 三级网站大全 | 男女啪啪无遮挡 | 自拍偷拍第四页 | 欧美日韩网 | 日韩精品在线第一页 | 午夜精品成人福利 | 日韩中文字幕免费视频 | 成人中文乱幕日 | 日韩免费一级无 | 人妖在线看免费网站 | 亚洲另类激情图区 | 日韩大片免费看 | 日韩在线观看一区二 | 日韩国产乱 | 国产精品播放 | 日本人妻字幕 | 久久骚妇 | 强奸乱伦免费视频 | 成人午夜视频免费观看 | 成人亚洲欧美日韩在 | 日韩性影院 | 婷婷五月丁香综合 | 天天干夜夜夜操 | 国产精品3 | 成人影片在线观看 | 国产色秀视频在 | 日韩在线电影 | 91白丝喷水 | 欧美日韩国产在线观看 | 尤物网站在线 | 岛国三级 | 日韩不卡中文字幕在线 | 成人蘑菇国产 | 三级无码在线观看 | 天天鲁天天谢天天擦 | 免费AA在线观看 | 国产精品自拍在线观看 | 不卡av在线| 国产91丝袜 | 日韩三级电影 | 狠狠艹AV | 深夜福利试看 | 天堂网无码| 波多野42部 | 操三八男人的天堂 | 成人午夜视频二区三区 | 成人动漫一区 | 日韩a级毛| 午夜福利院电影 | 久久这里只有精品9 | 免费三级网站 | 日韩狼友 | 日韩免费一二三四区 | 三级亚洲欧美日本 | 免费观看成人毛片A片 | 美女毛片网站 | 久久宗合久久宗合 | 海的味道国产精品 | 天美mv传媒 | 真实国产亂伦十页 | 成人免费观看三级片 | 91天天综合 | 萌白酱柚木国产精品 | 成人在线三级 | 无码成A毛片免费 | 中文字幕乱 | 国产人妖视频 | 成人午夜视频在线播放 | 日韩午夜伦y448 | 国产精品一区久久 | 超碰97在线看 | 国产又大又长又 | 99导航| 国产啪亚洲国产 | 午夜免费视频 | 日韩亚洲欧美国产精品 | 成人一二三区 | 国产高清无码在线观看 | 传媒视频一区二区 | 99久久久 | 97人人人 | 国产人妖视频网站 | 东京热成人在线 | 亚洲偷自 | 久操伊人 | 国产91网站 | 国产欧美自拍 | 另类欧美日韩 | 日韩亚洲欧美高清视频 | 国产91高清精品 | 日韩超燃电影院免 | 草莓视频网站成人18 | 成人午夜福利在线观看 | 日韩成人国 | 三级精品手机在线 | 超碰成人网 | 国产黄频网站 | 成人免费观看一区二区 | 日韩福利片| 中文字幕不卡在线 | 97视频网站| 日韩v精品在线观看 | 国产l精品国产亚洲 | 成人日韩视频 | 欧美欧美欧美 | 精品动漫无码 | 日韩欧美国产另类自拍 | 日韩大片高清播放器大 | 韩日无码视频 | 亚洲精品小电影 | 国产高清三级视频 | 国产三级网 | 无码不卡在线免费观看 | 福利视频导航页 | 日韩在线播放视频 | 91视频免费观看 | 麻豆网站在线 | 成人午夜在线观看国产 | 精品动漫一区二区三区 | 日韩成人电影导航 | 日韩黄色成人网站 | 东方AV在线播放 | 久久99国| 性欧美孕妇一二三四区 | 日韩高清在线播放不卡 | 波多野结衣app | 国产三级成人在线观看 | 丁香五月在线播放 | 苍井空一区 | 91香蕉下载 | 亚洲特黄| 韩日有码| 一区二区白丝 |