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

金喜正规买球

logo DevExpress WinForm中文手冊(cè)

文檔金喜正規(guī)買球>>DevExpress WinForm中文手冊(cè)>>標(biāo)準(zhǔn)DevExpress服務(wù)

標(biāo)準(zhǔn)DevExpress服務(wù)


立即下載DevExpress WinForms

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

可用服務(wù)
  • 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
附加信息
  • 如何使用服務(wù)
  • 如何使用服務(wù)擴(kuò)展方法

如何使用服務(wù)

1.注冊(cè)服務(wù)。

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

示例

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框架自動(dòng)調(diào)用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枚舉值來確定要?jiǎng)?chuàng)建的服務(wù)類型。
  • CreateMessageBoxService() ——?jiǎng)?chuàng)建一個(gè)使用標(biāo)準(zhǔn)WinForms消息框的Service。
  • CreateXtraMessageBoxService() ——?jiǎng)?chuàng)建一個(gè)使用DevExpress XtraMessageBox對(duì)象的Service。
  • CreateFlyoutMessageBoxService() ——?jiǎng)?chuàng)建一個(gè)使用FlyoutDialog對(duì)象的服務(wù)。

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

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

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

允許您顯示對(duì)話框。

接口

IDialogService

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

C#:

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

VB.NET:

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

 DevExpress MVVM框架自動(dòng)調(diào)用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…'方法都需要一個(gè)擁有該服務(wù)的視圖。如果傳遞的是null而不是View,框架會(huì)嘗試找到一個(gè)合適的窗口(在大多數(shù)情況下,會(huì)使用活動(dòng)窗口)。

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

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)——接受創(chuàng)建自定義對(duì)話框的工廠類。
Public Service Methods

ShowDialog——六種擴(kuò)展方法,顯示具有特定外觀和內(nèi)容的對(duì)話框。

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對(duì)象替換默認(rèn)對(duì)話框按鈕。為此,使用自定義命令的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——允許您訪問對(duì)話框并修改其外觀設(shè)置。例如,下面的代碼說明了如何將粗體字體樣式應(yīng)用于彈出對(duì)話框按鈕。

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

當(dāng)前對(duì)話服務(wù)

允許您管理當(dāng)前可見的對(duì)話框。

接口

DevExpress.Mvvm.ICurrentDialogService

注冊(cè)

服務(wù)只有在有活動(dòng)對(duì)話框時(shí)才存在——您不能注冊(cè)CurrentDialogService。

Create()方法

沒有

Public Service Methods
  • Close()、Close(MessageResultdialogResult)和Close (UICommanddialogResult) —— 使用給定的DialogResult關(guān)閉對(duì)話框,如果結(jié)果是UICommand類型,則調(diào)用相關(guān)的UICommand 。請(qǐng)注意,您只能使用最初傳遞到該方法中的對(duì)話框服務(wù)的UICommand之一ShowDialog。
  • WindowState——這個(gè)屬性允許您改變對(duì)話框的窗口狀態(tài)(正常,最小化或最大化)。

當(dāng)前窗口服務(wù)

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

接口

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(控制容器)——允許您為任何承載作為方法參數(shù)分配的控件的表單注冊(cè)服務(wù)。
  • 創(chuàng)建(Form currentForm)——為這個(gè)表單注冊(cè)一個(gè)服務(wù)。
  • Create(Func<Form> getCurrentForm)——為getCurrentForm方法返回的任何表單注冊(cè)一個(gè)Service。
公共服務(wù)API

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

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

窗口服務(wù)

允許您將視圖顯示為獨(dú)立的窗口(形式),并從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"))
本地注冊(cè)(模態(tài)窗口)

如果您想把表單顯示為模態(tài)對(duì)話框請(qǐng)?jiān)谧?cè)前修改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)——?jiǎng)?chuàng)建一個(gè)管理xtraform的服務(wù)。

 CreateRibbonWindowService(IWin32Window owner, string title = null)——?jiǎng)?chuàng)建一個(gè)管理Ribbon窗體的服務(wù)。

 CreateFlyoutWindowService(IWin32Window owner, string title = null)——?jiǎng)?chuàng)建一個(gè)管理Flyouts的服務(wù)。

 Create(IWin32Window owner, DefaultWindowServiceType type, string title = null)——?jiǎng)?chuàng)建一個(gè)Service,其類型取決于type參數(shù)。

 Create(IWin32Window owner, string title = null, Func<IWindow> factoryMethod = null) ——允許注冊(cè)一個(gè)服務(wù)來管理自定義表單(實(shí)現(xiàn)IWindowFactory接口的對(duì)象)。

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

公共服務(wù)方式
  • Show(object viewModel)——顯示與此 ViewModel 關(guān)聯(lián)的視圖。
  • Show(string documentType, object viewModel)——顯示由目標(biāo) ViewModel 管理的特定視圖。
  • Show(string documentType, objectparameter, objectparentViewModel)——允許您將特定參數(shù)傳遞到表單。
  • Hide()和Activate()——允許您最小化表單或?qū)⑵渲糜谧钋懊妗?
  • Close()——關(guān)閉窗口管理。

DocumentManagerService

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

接口

IDocumentManagerService

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

由于該服務(wù)管理特定的內(nèi)容提供程序,因此您無法全局注冊(cè)該服務(wù)。

Local Registration

C#:

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

VB.NET:

mvvmContext1.RegisterService(DocumentManagerService.Create(tabbedView1))
Create()方法
  • Create(IDocumentAdapterFactory factory)——?jiǎng)?chuàng)建一個(gè)控制特定提供者的服務(wù),提供程序是類的控件或?qū)ο螅缮訧DocumentAdapterFactory接口。factory參數(shù)接受以下類型的對(duì)象:
  1. 所有
  2. 選項(xiàng)卡MDI管理器
  3. XtraTabControl
  4. 導(dǎo)航框架
  5. Dock Manager
  6. TabFormControl
  • Create(Func<IDocumentAdapter> factoryMethod)——接受一個(gè)初始化新工廠對(duì)象的factoryMethod函數(shù),這允許您創(chuàng)建自定義工廠(實(shí)現(xiàn)IDocumentAdapterFactory接口的對(duì)象)。
Global Registration

由于該服務(wù)管理特定的內(nèi)容提供程序,因此您無法全局注冊(cè)該服務(wù)。

Local Registration

C#:

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

VB.NET:

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

窗口文檔管理器服務(wù)

 允許您添加承載自定義內(nèi)容的新表單。如果服務(wù)是用Create(IDocumentAdapterFactory factory)方法注冊(cè)的,它會(huì)添加新的浮動(dòng)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框架自動(dòng)調(diào)用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參數(shù),框架會(huì)嘗試找到一個(gè)應(yīng)該是Service所有者的視圖,在大多數(shù)情況下,使用活動(dòng)窗口。

  • Create(IWin32Window owner)——?jiǎng)?chuàng)建具有特定所有者的默認(rèn)類型的Service,默認(rèn)類型是全局注冊(cè)的類型。例如,如果您有全局注冊(cè)的功能區(qū)表單服務(wù)(RegisterRibbonFormWindowedDocumentManagerService),本地服務(wù)也會(huì)顯示功能區(qū)表單,如果沒有注冊(cè)全局服務(wù),則默認(rèn)類型為XtraForm。
  • Create(IWin32Window owner, DefaultWindowedDocumentManagerServiceType type)——?jiǎng)?chuàng)建一個(gè)具有目標(biāo)所有者的本地服務(wù),服務(wù)類型取決于類型參數(shù)。
  • CreateXtraFormService(IWin32Window owner)——注冊(cè)一個(gè)服務(wù),在XtraForms中托管它的項(xiàng)目。
  • CreateRibbbonFormService(IWin32Window owner) ——注冊(cè)一個(gè)服務(wù),在RibbonForms中托管它的項(xiàng)目。
  • CreateFlyoutFormService(IWin32Window owner)——注冊(cè)一個(gè)服務(wù),該服務(wù)在彈出對(duì)話框中承載其項(xiàng)目。
  • Create(IDocumentAdapterFactory factory) —— 一種擴(kuò)展方法,允許您為 WindowedDocumentManagerService設(shè)置本地內(nèi)容提供程序,使用此方法注冊(cè)的服務(wù)將子提供程序項(xiàng)目添加為浮動(dòng)表單。例如,以下代碼注冊(cè)與DocumentManager的TabbedView關(guān)聯(lián)的服務(wù),當(dāng)您調(diào)用該CreateDocument方法時(shí),服務(wù)會(huì)將浮動(dòng)文檔添加到此TabbedView。

C#:

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

VB.NET:

mvvmContext1.RegisterService(WindowedDocumentManagerService.Create(tabbedView1))

 下面的對(duì)象實(shí)現(xiàn)了IDocumentAdapterFactory接口,并且可以作為參數(shù)傳遞給這個(gè)方法:

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

 XtraTabControl和NavigationFrame子項(xiàng)目總是停靠的,不能將這些控件用作工廠參數(shù)。

 Create(Func<Form> factoryMethod, IWin32Window owner) ——允許您創(chuàng)建自定義工廠(實(shí)現(xiàn)IDocumentAdapterFactory接口的對(duì)象)。

公共服務(wù)方式
  • Documents——提供對(duì)此服務(wù)管理的項(xiàng)集合的訪問的屬性。
  • ActiveDocument——獲取或設(shè)置活動(dòng)項(xiàng)。
  • CreateDocument——?jiǎng)?chuàng)建新項(xiàng)的三個(gè)擴(kuò)展方法,根據(jù)注冊(cè)的不同,項(xiàng)目是一個(gè)獨(dú)立的表單/XtraForm/RibbonForm或浮動(dòng)面板由DocumentManager/XtraTabbedMdiManager擁有。

導(dǎo)航服務(wù)

 該服務(wù)允許您在NavigationFrame控件中從一個(gè)視圖導(dǎo)航到另一個(gè)視圖,并將應(yīng)用程序視圖作為托管控件中的頁面打開(例如,作為TabbedView選項(xiàng)卡)。

接口

INavigationService

管理控件
  • 導(dǎo)航框架
  • 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)——允許您為此服務(wù)設(shè)置本地內(nèi)容提供者的擴(kuò)展方法,當(dāng)使用此方法創(chuàng)建時(shí),服務(wù)將創(chuàng)建新項(xiàng)作為提供者的子項(xiàng)。

公共服務(wù)方式

與DocumentManagerService中相同的命令可用,加上以下導(dǎo)航API:

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

DispatcherService

允許您使用dispatcher在ViewModel中執(zhí)行操作。

接口

管理控件

沒有。

Global Registration

此服務(wù)已注冊(cè)。

Local Registration

C#:

mvvmContext1.RegisterService(DispatcherService.Create());

VB.NET:

mvvmContext1.RegisterService(DispatcherService.Create())
Create()方法
  • Create()——?jiǎng)?chuàng)建一個(gè)新的Service實(shí)例。
公共服務(wù)方式

BeginInvoke——異步執(zhí)行指定的委托。

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

通知服務(wù)

顯示傳統(tǒng)的警報(bào)窗口和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)——?jiǎng)?chuàng)建一個(gè)使用目標(biāo)管理器顯示通知的服務(wù),接受ToastNotificationsManager和AlertControl類實(shí)例作為參數(shù)。
公共服務(wù)方式
  • CreatePredefinedNotification(string header, string body, string body2, object image = null)——?jiǎng)?chuàng)建帶有圖像、標(biāo)題文本字符串和兩個(gè)常規(guī)正文文本字符串的通知。注意,這個(gè)方法創(chuàng)建了一個(gè)通知,但沒有顯示它——要使它可見,請(qǐng)調(diào)用ShowAsync方法。請(qǐng)參閱下面的代碼片段來獲取示例。

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 操作系統(tǒng)設(shè)置禁用 toast 通知),則該方法會(huì)在非UI線程中異步引發(fā)異常,此異常不會(huì)影響UI線程。要處理這些異常并響應(yīng)通知顯示失敗,請(qǐng)ShowAsync使用塊包裝方法的調(diào)用try..catch。

  • CreateCustomNotification(object viewModel)——?jiǎng)?chuàng)建一個(gè)帶有 ViewModel 的通知,ViewModel 參數(shù)需要一個(gè)實(shí)現(xiàn)DevExpress.Utils.MVVM.Services.INotificationInfo接口的類的實(shí)例。該界面公開一張圖像和三個(gè)字符串屬性,允許您通知設(shè)置圖標(biāo)、標(biāo)題文本字符串和兩個(gè)常規(guī)文本字符串。下面的代碼說明了一個(gè)示例。

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方法創(chuàng)建一個(gè)通知,但不顯示它,要顯示通知,調(diào)用通知的' show '和' Hide '方法。

啟動(dòng)畫面服務(wù)

此服務(wù)允許您顯示啟動(dòng)屏幕和等待表單,表明應(yīng)用程序正忙。

接口

管理控件

Splash Screen Manager

Global Registration

此服務(wù)已注冊(cè)。

Local Registration

C#:

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

VB.NET:

mvvmContext.RegisterService(SplashScreenService.Create(splashScreenManager))
Create()方法
  • Create(ISplashScreenServiceProvider serviceProvider)——?jiǎng)?chuàng)建一個(gè)管理目標(biāo)啟動(dòng)屏幕管理器的服務(wù)。
  • Create(ISplashScreenServiceProvider serviceProvider, DefaultBoolean throwExceptions) ——?jiǎng)?chuàng)建一個(gè)服務(wù),該服務(wù)管理目標(biāo)啟動(dòng)屏幕管理器,并在發(fā)生錯(cuò)誤時(shí)拋出異常。
公共服務(wù)方式

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

 要顯示Fluent Splash Screen或Overlay Form,請(qǐng)將相應(yīng)的字符串 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)

流暢的啟動(dòng)界面:

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()——隱藏活動(dòng)的啟動(dòng)屏幕或等待表單。
  • SetSplashScreenProgress(double progress, double maxProgress) and SetSplashScreenState(object state) ——將自定義數(shù)據(jù)注入當(dāng)前可見的啟動(dòng)畫面或等待表單的方法,SetSplashScreenProgress方法更新啟動(dòng)屏幕進(jìn)度條,SetSplashScreenState發(fā)送任何其他類型的數(shù)據(jù)(例如,啟動(dòng)屏幕標(biāo)簽的字符串?dāng)?shù)據(jù))。
啟動(dòng)畫面

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

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方法還可以將數(shù)據(jù)發(fā)送到啟動(dòng)屏幕和等待表單。為此,請(qǐng)使用簡單對(duì)象(字符串、數(shù)值等)作為方法參數(shù),執(zhí)行此操作時(shí),SplashFormBase.ProcessCommand方法將接收這些簡單對(duì)象作為arg參數(shù),并接收DemoProgressSplashScreen.CommandId枚舉器值作為cmd參數(shù),檢查cmd參數(shù)來確定哪個(gè)命令發(fā)送到您的啟動(dòng)屏幕并相應(yīng)地使用arg值。

 下面的 ViewModel 代碼調(diào)用SetSplashScreenState方法來傳輸閃屏標(biāo)簽的“幾乎完成...”字符串。“ SetSplashScreenProgress ”發(fā)送當(dāng)前(80)和最大(100)進(jìn)度條值。

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參數(shù)的CommandId.MVVMSetState值調(diào)用ProcessCommand重寫。SetSplashScreenProgress方法調(diào)用ProcessCommand重寫兩次:首先,cmd參數(shù)返回 CommandId.SetProgressValue;其次,cmd參數(shù)返回 CommandId.SetProgressValue,讀取這些參數(shù)值并應(yīng)用來自arg參數(shù)的數(shù)據(jù)。

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

下圖展示了結(jié)果。

 Running results

 當(dāng)您更新一個(gè)啟動(dòng)屏幕元素時(shí),請(qǐng)使用上面的示例。否則,由于SetSplashScreenState方法總是返回CommandId.MVVMSetState作為cmd參數(shù),因此無法知道arg數(shù)據(jù)應(yīng)該去哪里。對(duì)于這種情況,請(qǐng)改用以下方法之一。 

  • 使用復(fù)雜對(duì)象作為參數(shù)調(diào)用SetSplashScreenState方法,該對(duì)象應(yīng)包含枚舉器值和所需的數(shù)據(jù)。您可以使用System.Tuple結(jié)構(gòu)體、System.Collections.Generic.KeyValuePair對(duì)象或object[]數(shù)組作為參數(shù)。
  • 調(diào)用使用DevExpress.Utils.MVVM.Services.SplashScreenServiceState對(duì)象作為參數(shù)的SetSplashScreenState方法,此對(duì)象具有Command和State fields字段,使用這些字段可以傳遞所需的數(shù)據(jù)和相應(yīng)的枚舉器值。

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

C#:

public enum SplashScreenCommand {
StateLabelCommand,
PercentLabelCommand,
ProgressBarCommand
}

VB.NET:

Public Enum SplashScreenCommand
StateLabelCommand
PercentLabelCommand
ProgressBarCommand
End Enum

這些自定義枚舉器值標(biāo)記來自SetSplashScreenState方法的不同數(shù)據(jù)類型。

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

由于您的數(shù)據(jù)現(xiàn)在附帶了相應(yīng)的枚舉器值,因此可以確定arg參數(shù)中存儲(chǔ)了哪些數(shù)據(jù)并正確使用它。

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

 下圖展示了一個(gè)帶有進(jìn)度條和兩個(gè)標(biāo)簽的啟動(dòng)畫面,這三個(gè)元素使用SetSplashScreenState方法更新。

Startup screen
等待表單

 要顯示等待表單,使用相同的ShowSplashScreen和SetSplashScreenState方法。表單有兩個(gè)標(biāo)準(zhǔn)的文本塊——標(biāo)題和描述,因此SetSplashScreenState應(yīng)該傳遞一個(gè)在Wait Form的ProcessCommand方法中解析的雙字符串?dāng)?shù)組。

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

打開并保存文件對(duì)話框服務(wù)

這些服務(wù)調(diào)用允許用戶打開文件并將其保存到本地存儲(chǔ)的對(duì)話框。

接口

 IOpenFileDialogService , ISaveFileDialogService

管理控件

沒有。

Global Registration

兩項(xiàng)服務(wù)均已注冊(cè)。

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()——?jiǎng)?chuàng)建一個(gè)文件對(duì)話框服務(wù)。

 Create(SaveFileDialogServiceOptionsdialogServiceOptions)/Create(OpenFileDialogServiceOptionsdialogServiceOptions)——使用指定的設(shè)置創(chuàng)建所需的文件對(duì)話框服務(wù)(請(qǐng)參閱“公共服務(wù)方法”部分中列出的對(duì)話框?qū)傩裕?

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

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——返回對(duì)話框打開(保存)的文件。

文件夾瀏覽器對(duì)話框服務(wù)

接口

IFolderBrowserDialogService

管理控件

沒有。

Global Registration

該服務(wù)已注冊(cè)。

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()——?jiǎng)?chuàng)建文件夾瀏覽器對(duì)話框服務(wù)的新實(shí)例。

 Create(FolderBrowserDialogServiceOptionsdialogServiceOptions)——使用指定的設(shè)置創(chuàng)建文件夾瀏覽器對(duì)話框服務(wù)的新實(shí)例(請(qǐng)參閱“公共服務(wù)方法”部分中列出的對(duì)話框?qū)傩裕?

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

如何使用服務(wù)擴(kuò)展方法

本節(jié)介紹如何使用服務(wù)擴(kuò)展方法的最常見參數(shù)。

對(duì)象視圖模型

 此參數(shù)存儲(chǔ)應(yīng)導(dǎo)航到、在對(duì)話框中打開、托管在新 DocumentManager 文檔中等的子ViewModel實(shí)例。要?jiǎng)?chuàng)建此類實(shí)例,請(qǐng)使用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擴(kuò)展方法的替代方法,該參數(shù)傳遞parent ViewModel的一個(gè)實(shí)例,使用此參數(shù)的擴(kuò)展方法通常也有Parameter參數(shù)。

對(duì)象參數(shù)

 這個(gè)參數(shù)將特定的對(duì)象傳遞給實(shí)現(xiàn)ISupportParameter接口的子ViewModels。實(shí)現(xiàn)此接口的ViewModels具有Parameter屬性,該屬性會(huì)重新計(jì)算此參數(shù)并將其傳遞回調(diào)用方法的位置。

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
方法變化

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

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

對(duì)于后一種情況,可以使用Framework進(jìn)行數(shù)據(jù)注入或者調(diào)用以下方法推遲數(shù)據(jù)注入:

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精品欧美激情在线播放 | 亚洲精品vs中文字幕白桨 | 精品国产免费人成电影在线观看 | 国产女人抽搐喷浆视频 | 亚洲综合色区中文字幕 | 欧美精品一区二区三区中文 | 国产又爽又黄又刺激的视频 | 中文字幕有码在线观看 | 亚洲国产欧美日韩精品网 | 亚洲一区二区三区四区在线 | 91精品欧美一区二区综合在线 | 韩国三级hd中文 | 精品国产乱 | 精品欧美一区二区三区在线 | 日本一卡2卡三卡4卡网站 | 色男人在线电影视频网站 | 欧美国产日韩在线播放成人 | 91精品啪在线观看国产线免费 | 欧美日韩国产在线观看 | 在线观看第一页 | 在线视频播放 | 欧美综合乱码一区二区三区 | 国产午夜三级一区二区三 | 182tvc午夜福利在线观看污 | 国产精成a品人v在线 | 思思热99re热在线精品 | 国产又黄又大又粗的视频 | 国产精品午夜免费观看网站 | 国户一区二区免费视频 | 国产经典在线观看一区 | 国产精品宾馆在线精品酒店↗ | 国产亚洲玖玖精品 | 久热这里只有精品99在线观看 | 亚洲区小说区激情区图片区 | 噜噜噜在线视频免费观看 | 最新电影电视剧在线观看 | 日韩在线精品一区二区三区 | 伊人影视网 | 精品免费国产一区二区三区四区五 | 国产一区二区三区精品观看啪 | 国内精品视频一区二区三区 | 最新国产91精品第二页 | 日本sm极度另类视频 | 三级在线电影 | 美女国产在线观看免费观看 | 欧美三级在线观看国产 | 人人鲁人 | 插我一区二| 中文字幕在线播放视频 | 色哟哟www视频在线观看高清 | 欧美日韩免费精品一区二区在线 | 自拍亚洲欧美国产 | 国产精品一区99国产aaa精 | 国产男女猛视频在线观看 | 国产精品大白天新婚身材 | 最污网站 | 三级精品 | 深爱激情 | 成a人片在线观看日本 | 国内盗摄视频一区二区三区 | 极速影院 | 国产综合欧美日韩视频一区 | 更新日韩| ynzhcl.org.cn| 亚洲偷偷自拍高清 | 天堂mv在线mv免费mv香蕉 | 亚洲自偷精品视频自拍 | 国产在线观看片免费人成视频 | 亚洲中文娱乐网在线观看 | 48国产 | 久操免费在线 | 国产草莓 | 欧美午夜成年片在线观看 | 亚洲日本精品国产一区vr | 国内一区| 欧美日韩一区视频导航 | 日本特大a级猛片在线观看 国精产品999国精产 | 日韩亚洲产 | 国产亚洲精品一级在线观看 | 日韩免费的视频在线观看香蕉 | 精品国产午夜福利在线观看蜜月 | 成欢阁免费入口在线观看 | 欧美一级a人与 | 国产一区二区三区精彩视频 | 亚洲精品美女久 | 欧美性猛交xxxx黑人猛交 | 国产最新一区二区三区天堂 | 中字幕视 | 男女爽爽爽视频免费网站 | 国产精品美女网站在线看 | 免费人成黄页在线观看69 | 57pao视频国产在线观看 | 热门电影综艺电视剧在线观看 | 日本永久免费aⅴ在线观看 噼里啪啦hd免费观看动漫 | 日韩中文字葛高清在线专区 | 日本国产欧美 | 日韩在线看精品免费视频 | 亚洲欧美日韩国产精品专区网 | 青青91视频 | 日本韩国偷拍视频对白不卡高清精 | 中文字幕有 | 欧美日韩在线一区二区三区 | 国产精品天天在线午夜更新 | 高清一区二区三区视 | 欧美日韩一本到手机视频观看一区 | 最新国产99视 | 粗大的内捧| 日本精品一区二区在线播放 | a级全黄试看30分钟gif动图 | 中文字幕亚洲精品第1页 | 在线观看91精品国产hd | 免费不卡影院 | 欧美va免费高清在线观看 | 国产精品猎奇另类视频 | 真实的国产乱xxxx在线 | 热播韩剧网 | 中文字幕精品亚洲无线码二 | aⅴ人片在线观看 | 第一页欧日韩在线视频 | 99在线观看免费 | 成人午夜兔 | 欧美自拍区日韩国产区 | 丰满岳乱妇一区 | 秋霞a级 | 亚洲欧美精品一区二区三区四区 | 中文字幕偷乱视频在线 | 又刺激视频| www.五月婷 | 亚洲成v片 | 婷婷综合激情五月中文字幕 | 国产精品亚洲欧美动漫卡通 | 婷婷中文视频在线 | 亚洲人成网线在线播放va | 国产特级婬片免费看 | 精品国产迪丽热巴在线 | 国产一级一片免费播放 | 一区二区三区欧美日韩 | 色妺妺在线视频喷水 | 亚洲欧美人高清精品a∨ | 九九精品99久 | 日本精品成 | 日本在线综合一区二区三区 | 欧美视频 | 区二区三区三 | 手机在线观看 | 亚洲欧洲自拍偷线高清一区二区 | 99精品一区二区三区免费视频 | 日韩一级在线观看 | 91欧美 | 国产v在线在线观 | 乱伦国产精品日本 | 日本欧美一区二区三区不卡 | 最近中文字幕免费mv视频7 | 国产精品福利片免费看 | 日产精品二线三线 | 亚洲欧美精品中文字幕 | 一区二区三区欧美在线 | 国产一级a爱片免费看 | 欧美黑人疯狂性受 | 永久免费观看 | 国产对白普通话视 | 亚洲一区在线综合 | 精品深夜寂 | 亚洲精品国偷拍自产 | 国产在线观看 | 色舞月亚洲综合一区二区 | 最新国产99热这里只有精品 | 日韩一区二区超清视频 | 污污视频在线免费观看 | 好看的剧免费在线观看 | 亚欧洲乱码视频在线专区网站 | 日产国产新一区 | 日日夜夜 | 99视频精品全部免费在线 | 手机看片国产欧美日韩 | 国产中文成人精品小说 | 一级特黄h厂视频网站 | 国产精品免费aⅴ片在线观看 | 精品香蕉一区二区三区 | 国产精品理| 国产久一视频在线观看app | 精品亚洲欧美视频在线观看 | 午夜激情视频三区在线 | 国产人妖ts在线视频网 | 国产黄大 | 午夜福利国产主播露出 | 亚洲中字幕日产aⅴ | 日本好好热| 欧美日韩一区观看 | 超刺激高跟鞋脚交视频在线 | 精品永久在线 | 日韩欧美亚洲一区 | 亚洲人成电影网站色 | 亚洲精品第1页 | 国产91精 | 高清在线精品一 | 91探花国产| 17p密泬18p | 杨幂在日本一区二区视频 | 欧美综合自拍亚洲综合 | 欧美日韩国产精品二区在线观看 | 追剧不等待 | 国产午夜激情视频 | 日本不卡一区二区aα | 国产激情怍爱视频在线观看 | 国产丝语 | 日韩亚洲综合欧美 | 亚洲国产精品综合小说图片区 | 性色xxxxhd天美传媒 | 国精产品一二二线网站 | 国产一区视频在线观看免费 | 精产国品 | 欧美性受xxxx黑人猛交免费 | 国产男同gaya | 57pao视频国产在线观看 | 欧美午夜视频网站在线观看 | 国产高清欧美情侣视频 | 日韩精品免费一级视频 | 美女视频黄频a美女大全 | 国产玉足sm足控脚交视频 | 日韩欧美国产一区二区三 | 日韩欧美在线国产一区二区 | 亚洲国产vv| 亚洲日韩一区二区三区四区高清 | 区二区三区在线观看 | 欧美一区二区另类在线播放 | 国产又粗又猛又黄又爽视频 | 激情文学综合区图片区小说区 | 乱伦国产影视欧美 | 国产羞羞又硬又粗又长又大 | 中文字幕乱码免费专区 | 日韩在线电影大全免费观看 | 亚洲大片精品永久免费看网站 | 亚洲à∨精品一区二区三区导航 | 在线国产自偷自拍视频 | 国产玉足脚交极品在线视频 | 亚洲午夜国产精品无卡 | 一级日韩免费大片 | 日本欧美一区二区三区在线观看 | 午夜成人影院网站18进 | 五月天婷婷在线观看免费 | 欧美日韩国产一中文字不卡 | 中日欧美精品在线播放 | 1905电影网 | 在线免费观看污网站 | 亚洲日韩在线观看免费视频 | 亚洲色一区二区三区四区 | 亚洲国产欧美在线一区二区 | 乱码一线二线三线新区破解欧 | 亚洲国产美国国产综合一区 | 国产欧美国日产在线播放 | 成人国产99视频在线观看 | 陌陌影视在线观看高清完整版 | 国产手机精品自拍视频 | 国产日韩欧美视频在线观看 | 97天堂nba永久| 亚洲欧美日韩国产综合专区 | 国产系列在线精品二区 | 国产精品免费视频观看拍拍 | 韩日国产精品一区二区三区 | 国产在线精品一区二区三区直播 | 日韩一级在线观看 | 国产精品亚洲五月天高清 | 欧美日韩国产一区二区三区 | 青青草免费观看 | 成人伦理在线观看国产 | 国产精品99在线观看 | 亚洲视频国产精品 | 国产精品涩涩涩视频网站 | 国产日韩欧美在线观看 | 国产亚洲欧美日韩国产片 | 一区二区三区欧美日韩 | 日韩精品一区二区三区免费在线 | 日本不卡一区二区三区视频 | 日本亚洲一区二区三区 | 国产又粗又黄又爽的视频 | 欧美v亚洲v综合 | 日韩中文高清一 | 欧美日韩在线视频制服 | 色综合欧美在线视频区 | 国产专区在线视频 | 在线观看国产日韩欧美 | 91蜜桃视频| 中文字幕在线二区 | 欧美最猛性xxxxx直播 | 精品免费看一区二区三区 | 99re9| 日韩欧美精品一 | 爽爽狠狠婷婷97 | 国产自国产自愉自愉免费24区 | 国产炮机主播在线观看 | 亚洲第一国产日韩精品欧美 | 国产精品三级国语在线看 | 日韩精品免费高清视频在线 | 成人免费高清视频 | 在线a亚洲视频播放在线观看 | 欧美日韩国产一区 | 国产精品大战 | 精品一线二线三线区别在哪欧美 | 欧美曰韩免费一级在线 | 在线观看欧美亚洲 | 亚洲国产精品自在拍在线播放蜜臀 | 亚洲无人区码卡二卡三卡四卡 | 老子影院午夜伦不卡亚洲 | 欧美黑人在线免费观看 | 99国产在线 | 精产国品一| 高清免费视频一区二区三区 | 亚洲精品成人区在线观看 | 青青草97国产精品免费观看 | 色久视频| 成人精品午夜在线观看 | 最新中文字幕在线观 | 办公室激情上司和秘书小说 | 亚洲人成一区在线 | 91精品视频在线免费观看 | 超级碰97直线国产免费公开 | 国产乱码卡二卡 | 日本亚洲色大成网站www | 中文有码在线视 | 视频在线一区二区三区 | 亚洲国产一区二区三区 | 一区二区日韩 | 亚洲欧美日韩在线资源观看 | 国产欧美亚洲一区二区 | 亚洲日本中文字幕天堂网 | 欧美精品视频手机在线视频 | 综合五月天 | 亚洲欧美综合在线精品 | 国产午夜福利在线观看视频 | 亚洲精品日韩一区 | 亚洲开心婷婷中文字幕 | 亚洲精品国产第一区二区小说 | 国产高在线精品亚洲三区 | 国产精品高清尿小便嘘嘘主演 | 视频三区 | 精品大臿蕉视频在线观看 | 国产91玉足脚交在线播放 | 国产日韩精品一区二区在线观看 | 国产精品猎奇另类视频 | 国产伦精品 | 国产精品边做奶水狂喷 | 日韩一级簧片 | 欧美日韩一区二区精美视频 | 欧美日本制服亚 | a在线观看免费网站大全 | 亚洲欧美日本国产—区二区三区 | 国产精品福利免费 | 日本高清视频在线免费观看 | 网站在线观看 | 国产黄大片在线观看 | 欧美高清一区二区三区不卡视频 | 国产一级精品高清 | 国产操操 | 日韩欧美国产免费看清风阁 | 成人免费一区二区三区视 | 亚洲欧洲自拍图片 | 亚洲2025天天堂在线观看 | 国产午夜福利精品一区二区三区 | 91精品人成在线观看 | 欧美精品另类 | 国内精品国内精品自线一二三 | 亚洲经典在线中文字幕 | 又污又爽无 | 国产在线精品国偷产拍 | 精品成人a区在线观看 | 99久热精 | 国产欧洲精品自在自线官方 | 欧美在线观看网站 | 国产精品污www一区二区三区 | 欧美精品视频在线观看 | 一区二区在线视 | 国产精成人品日日拍夜夜免费 | 国产福利在线 | 日韩国产综合在线 | 看国产黄| 国产黑色丝袜在线观看下 | 野花免费高 | 四川妇女bbbwbbbwm村妓 | 欧美亚洲日本在线播放 | 亚洲精品国产精品国自产观看 | 国产l精品国产亚洲区在线观 | 91精品国产闺蜜国产在 | 免费人成在线观看 | 亚洲中文字幕在线停止 | 日本性爱视频免费看 | 国产偷∨国产偷∨精品视频 | 亚洲免费视频一区二区 | 成人国产免费软件 | 91热成人精品国 | 白丝袜美 | 成人亚欧网站 | 日韩精品一区二区三区vr | 亚洲一区电影 | 国产尹人香蕉在线观看 | 国精品日韩欧美一区二区三区 | 国产精品自产拍在线观看中文 | 天堂а√在线最新版中文在线 | 国产91爱剪辑直播在线观看 | 男人性毛| 99视频有精品视频在线观看 | 国产一区二区三区视频在线观看 | 中文字幕亚洲综合小综合 | www.妞干网.com | 午夜国产在线一区二区三区 | 国产极品精品免费 | 99精品国产九九国产精品 | 人气电影 | 手机免费看一级 | 1905电影网 | 日韩欧美一区二区三区综学生 | 综合亚洲欧美日韩一区二区 | 制服国产日韩欧美另类 | 国产在线观看一区二区三区四区 | 尹人香蕉久 | 日本高清中文字幕高清在线 | 日韩精品一区二区三区视频网 | 鲁丝片一区二区三区免费 | 秋霞电影院yy2933 | 欧美女同小视频在线网站 | 亚洲国产欧美日韩精品一区二 | 在线视频91| 国产午夜福利一区在线观看 | 国产激情一区二区三区小说 | 国产一区高清在线欧美 | 2025年最新国产精品正在播放 | 91九色私密保健 | 国产精品一区二区制服 | 麻花传md0174苏蜜清歌 | 欧美精品高清在线观看 | 青青草中国三 | 青草青草久热精品视频在线播放 | 欧美交换乱理伦 | 伊人网视频在线观看 | 吃瓜网黑料大全 | 亚洲精品国产自在现线最新 | 欧美人成网站中文字 | 亚洲欧美v国产 | 日韩a无v码在线播放免费 | 国产精品亚洲精品日韩已满 | 三三影院网 | 国产高清亚洲精品视bt天堂频 | 国产精品电影在线观看 | 星空影院 | 成人三级视频在线观看不卡 | 欧美性色欧美a在线观看 | 日本免费在线看aⅴ | 日本国产欧美精品在 | 色国产精品一区在线观看 | 欧美一区在线日韩 | 国自产偷精品不卡在线 | 亚洲欧美综合人成在线 | 欧美成一级 | 国产女人aaa级久 | 国产一区二区三区猎奇视频 | 国产精品黄大片在线播放 | 午夜亚洲福利在线老司机 | 亚洲欧美日韩中文字幕在线不卡 | x8x8国产在线最新地址 | 国产女主播一区 | 日韩一区二区三区在线观看 | 韩国三级香港三级日本三级 | 果冻传媒一区二区天美传媒 | 色老头免费视频精品三区 | 国产亚洲欧美精品一区 | 91凤楼 | 日韩欧美中文精品电影 | 91精品在线国产 | 国产免码va在线观看免费 | 日本在线视频一区二区三区 | 国产日韩一区二区三免费高清 | 国产人成在线观 | 国产精品中文字幕制服 | 精品一区二区三区高清 | 亚洲人妖女同在线播放 | 久99视频精品免费观看福利 | 国产天堂精品 | 中文字幕在线观看日本 | 日本不卡一区 | 国产精品片在线 | 婷婷伊人网 | 日韩欧美综合欧美日韩综合 | 日本免费一区二区五区六区 | 经典a三级在线理论香港 | yellow高清免费观看日本 | 欧美日韩中文在线视频 | 在线观看高清三级综合 | 国产老熟女狂叫对白 | 国产精品丝袜亚洲熟女 | 精品一区二区不卡 | 成人精品视频 | 日本一区二区三区四区在线 | 国产一区二区三区免费在线观看 | 中文字幕一区二区三区四区 | 国产极品在线 | 日韩精品午夜视频一区二区三区 | 国产黄大片在线观看视频 | 亚洲欧美国产日韩精 | 自拍偷在 | 国产精品专区第1页 | 国产在线观看一区二区三区四区 | 国产亚洲中文一区二区三区 | 激情国产精品一区二区 | 真实国产熟睡乱子伦视频 | 亚洲精品理论电影在线观看 | 国国产乱理伦片在线观看夜 | 亚洲综合v在线在 | 99国产在线国语精品2025 | 野花日本大全免费观看中文7 | 亚洲小说区图片区另类春色 | 亚洲日本欧美日韩精品 | a性视频| 99视频在线精品66 | 3d动漫一区二区 | 欧美视频一区免费精品 | 中文字幕在线观看亚洲 | 国产精品一区二区含羞草 | 日本三级韩国三 | 中文字幕人成人乱码亚洲电影 | 欧美日韩国产亚洲沙发 | 日韩欧美一区二区在线精品 | 亚洲精品自偷自拍 | 亚洲精品欧美精品日韩精品 | 亚洲日本| 免费国外性视频网站 | 欧美日韩亚洲国产综合在线观 | 国产丝袜控视频在线观看 | 九九热线精品视频在线观看 | 国产99这里只有精品 | 国产亚洲精品日本亚洲网站 | 97天堂nba永久 | 日韩亚洲国产女同二区三区 | 日韩亚洲欧美高清在线观看 | 两个人看的视频在线观看 | 噼里啪啦hd免费观看动漫 | 在线观看免费人成视频网 | 99精品无人区乱码1区2区3区 | 亚洲色熟女图激情另类图区 | 精品三级乱伦免费 | 亚洲高清一区二区三区不卡 | 性欧美video高清 | 色一情一乱一伦一区二区三区 | 2025高清免费热播电视剧电影 | 欧美亚洲另 | 精品女同一区二区三区 | 99国产清国产精品国产 | 老司机成人亚洲精品影院 | 亚洲精品三级 | 米奇欧美777四色影视在线 | 911中文字幕免费高清观看 | 性生交生活影碟 | 欧美精品v日韩精品v韩国精品v | 精品国产蜜桃 | 国产一级二级三级经典在线 | 2025最新热门电视排行榜 | 好看的电影电视剧在线观看 | 亚洲卡一卡二卡三乱草莓 | 国产中文字幕在线观看 | 青青草原网站 | 欧美在线精品国自产拍免费 | 热门电影电视剧短剧免费在线观看 | 91情国产l精品国产亚洲区 | 99国产婷婷综合在线视频 | 老司机免费精品线观看86 | 最新热门高清电影 | 国产午夜场免费视频在线播放 | 99re这里只有精品国产精品 | 精品国产久九九 | 中文字幕亚洲精品资源网 | 在线观看欧美a级精品视频 电影中文 | 成人a大片在线观看 | 亚洲国产精品日韩专区a∨ 欧美国产日韩a视频在线不卡 | 免费国产偷人三大片视频 | 国产一区二区三区四区在 | 免费看高视频hh网站免费 | 欧美激情视频一区二区三区免费 | 日本最新乱伦视频 | 成人午夜影院网站 | 亚洲小说欧美中文在线 | 国产精品视频大陆精大陆 | 在线视频欧美日韩 | 亚洲欧美日韩综合aⅴ电影 国产又粗又猛又爽又黄的视频七张 | 精品日韩一区 | 91秦先生在线视频 | 欧美亚洲一区电影 | 西西人体ww| 一级特黄高清aaaa大片 | 国产特黄特色一级特色大片 | 国内成人免费视频 | 国产亚洲欧美另类一区二区三区 | a级在线观看日韩 | 国产精品亚洲综合一区在线观看 | 日本大片免a费观看视频 | 亚洲欧美日韩激情在线观 | 日本精品a在线观看 | 国产视频亚洲 | 日韩本免费一 | 中文在线日韩 | 日本一二三区不卡高清区 | 真实国产乱子伦 | 亚洲国产一区二区在线免费 | 特殊重囗 | 99精品热这里只有精品 | 97高清国语自产拍 | 国产a∨天天免 | 免费人成在线观看vr网站 | 国产jizzjizz免费看 | 亚洲欧洲日 | 丝袜美腿女邻居人 | 在线看一区二区中 | 国产精品探花一区在线观看 | 日本免费人成视频在线观看 | 国产精品喷水 | 日本韩国欧美 | 国产乱子夫妻xx黑人xyx真爽 | 欧美日韩国产在 | 亚洲人成欧 | 国产亚洲欧洲综合777 | 国产精品素人搭讪在线播放 | 国产高清一区二区视频 | 最新高清电影在线免费观看 | 精品国产中文字幕 | 九九视频免费精品视频 | 新版资源天堂中文 | 精品乱子伦一区二区三区 | 亚洲人成中文字幕在线观看 | 咻咻漫画在线观看 | 亚洲十大国产精品污污 | 欧美日韩国产高清精卡 | 亚洲人成电影网站色 | 免费网站看v片在线a | 男人操女人免费在线观看 | 国产福利在线观看永 | 亚洲激情午夜福利色色色 | 午夜欧美福利 | 草102| 日韩国产欧美视频 | 国产精品日本一区二区在线看 | 成人激情五月天 | 日韩欧美综合在线二区三区 | 日本精品中文字幕 | 日本伊人网在线观看 | 91精品全国免费观看老司机 | 亚洲视频中文字幕在线不卡 | 免费中文字幕视频2025一页 | 亚洲国产日韩a在线观看 | 黑粗硬大欧美 | 亚州一级在线播放 | 精品国产福利片在线观看 | 国产日韩欧美一区二区三区精品 | 亚洲一区二区在线免费观看 | 国产新拍在线 | 精品国产免费第一区二区三区 | 欧美中文字幕人成在线网站 | 又色又爽又黄的视频 | 两性色午夜视频免费播放 | 日本在线播放 | 一级中文在线播放 | 亚洲视频天堂 | www.99在线观看| 海量高清影片免费观看 | 日韩经典欧美 | 国产真实露脸乱子伦 | 亚洲日韩v | 99精品免费 | 欧美伦理一区二区三区电影 | 国产午夜免费视频 | 91视频精品全国免费观看 | 成人亚洲性情网站www在线 | 欧美日韩性生活视频 | 色两性午夜视频免费观看 | 亚洲熟女| 国产中文字幕视频在线播放 | 国产欧美一区二区精品性色 | 亚洲欧美精品变态另类 | 喷了一地| 九月丁香婷婷激情四射视频一区 | 日本在线观看的免费 | 99视频在线精品自拍 | 欧美日韩亚州在线 | 人人曰人人 | 亚洲午夜国产精品无卡 | 欧美日韩三区 | 一道免费一区二区三 | 国产一级淫片a免费播放口欧美 | 国产国产人在线成免费视频69 | 亚洲精品911在线永久观看 | 国产一区二区高清 | 国产欧美国产精品第一区 | 国产精品国产自线拍免费不卡 | 国产精品人娇在线内谢 | 91精品手机国产在线观 | 傲盟下载 | 巨臀中文字幕一区二区 | 综合网在线 | 在线观看精品国产福利片87 | 亚洲欧美在线观看 | 中文字幕国产第1页直播在线 | 在线日本高清不卡免费v | 亚洲精品一在线观看 | 国产午夜免费视频 | 亚洲一区二区三区在线观看播放 | 在线观看国产日韩欧美 | 又硬又粗又长又爽免费看 | 看黑人巨大精品欧美一区 | 国产美女一区三区在线观看 | 在线观看免费人成片 | 亚洲免费观看视频 | 91精品啪国产在线观看免费牛牛 | 都市激情亚 | 国产欧美日韩精品第一区 | 2025最新国产在线精品不卡顿 | 吖v国产在线高清播放 | 91免费视视频在线观看 | 男人操女人免费在线观看 | 午夜三级福利在线观看 | 韩国三级香港三 | 国产韩国精品一区二 | 亚洲色成人一区二区三区 | 国产精品视频免费一区二区三区 | 国产午夜福利在线永久视频 | 乱码在线观看 | 亚洲日本一线产区和二线产 | 日韩在线视频不卡一区二区三 | 国产极品美女一区二区三区 | 亚洲欧美日本韩国在线观看 | 国产老熟女狂叫对白 | 国产亚洲免费在线观看 | 欧美一级在线观 | 日韩在线一区 | 国产超级乱婬视频免费 | ww网站免 | 又污又爽又黄的网站 | 国产精品免费观看网站 | 亚洲成在人线在线播放 | 在线观看免费人成视频国产 | 欧美激情国产精品视频一区二区 | 囯产精品 | 好男人www社区 | 中文字幕精品一二三四五六七八 | 高清影视电视 | 国产精品视频每日更新播放 | 亚洲精品我不卡 | 精精国产xxxx视 | 欧美亚洲校园第一页 | 亚洲欧美日韩精品自拍 | 操操综合 | 女同恋性一区二区三区四区 | 97伦理电影在线不卡 | 日本又黄又粗暴的视频 | 国产精品亚洲综合色区 | 午夜福利在线观看亚洲一区二区 | 国产大片黄在线观看 | 精品二区三区三级日韩人妖 | 97在线视频观看在线观看视频 | 国产麻传媒精品国产v | 日韩电影大片手机在线观看 | 国产区免费视频在线观看 | aⅴ天堂在线 | 成人永久免费视频网站 | 亚洲激情午夜福利色色色 | 521国产精品网站在线观看 | 日本黄页网站在线观看 | 亚洲综合一区二区三区四区五区 | 99国精品午夜 | 精品一区二区三区四区 | 重口视频二区在线观看 | 国产91精品高清一区二区三区 | 国产亚洲a∨片在线观看 | 性爱国产精品福利在线 | 日本一区二区三区精品视频 | 欧美性受xxxx黑人猛交免费 | 午夜性爱故事在线观看 | 亚洲欧美日韩一区中文字幕 | 日韩亚洲国产欧美在线看片 | 国精产品一二二线网站 | 国产经典三级在线播放 | 亚洲国产中文在线二区三区免 | 日韩精品o欧美精品亚洲精品 | 国产精品视频一区二区噜噜 | 91精品国产一区蜜桃 | 国产精品亚洲专区 | 三区精品在线观看 | 日本x片成年免费观看视频 性开放的欧美大片黑白配 欧美激合综图片区小说 | 欧美日韩在线在线观看 | 亚洲欧美中文一区二区三区 | 宅男噜噜噜一区二 | 91国内揄拍| 一本大道精品视频在线 | 成年人在线观看视频网站 | 国产伊人 | 久爱成疾在线视频播放 | 久热精品视频在线播放 | 91精品专区国产盗摄 | 五月丁香中文字 |