国产精品青草久-国产精品情侣愉拍-国产精品区网红主-国产精品区一区二-国产精品热久久-国产精品热热热-国产精品人aⅴ-国产精品人成在线-国产精品人妻人伦-国产精品人人

金喜正规买球

logo DevExpress WinForm中文手冊

數據和屬性綁定


立即下載DevExpress WinForms

根據您綁定的屬性,有三種可能的情況:

 常規綁定——ViewModel屬性綁定到任何不可編輯的View元素的屬性。由于元素不可編輯,因此不需要將更新通知發送回綁定屬性(單向綁定)。

 數據綁定——Model屬性(數據字段)綁定到編輯器屬性,如果用戶可以更改編輯器值,則需要更新綁定屬性(雙向綁定)。

屬性依賴性——綁定同一個ViewModel的兩個屬性。

常規綁定

 如果需要將數據從一個屬性傳遞到另一個ViewModel的屬性,您可以使用標準的數據綁定API,或者推薦使用DevExpress MvvmContext.SetBinding方法。

 例如,視圖有一個沒有文本的,ViewModel有一個可綁定的字符串“LabelText”屬性,使用以下任何一種方法將屬性值傳遞給此Label。

form

C#:

//ViewModel code
[POCOViewModel()]
public class Form1ViewModel {
public Form1ViewModel() {
LabelText = "Value stored in ViewModel";
}
public virtual string LabelText { get; set; }
}

//View code
//option #1 (recommended): SetBinding method
var fluent = mvvmContext1.OfType<Form1ViewModel>();
fluent.SetBinding(labelControl1, l => l.Text, x=>x.LabelText);
//option #2: DataBindings
Form1ViewModel viewModel = mvvmContext1.GetViewModel<Form1ViewModel>();
labelControl1.DataBindings.Add("Text", viewModel, "LabelText");

VB.NET:

'ViewModel code
<POCOViewModel()>
Public Class Form1ViewModel
Public Sub New()
LabelText = "Value stored in ViewModel"
End Sub
Public Overridable Property LabelText() As String
End Class

'View code
'option #1 (recommended): SetBinding method
Dim fluent = mvvmContext1.OfType(Of Form1ViewModel)()
fluent.SetBinding(labelControl1, Function(l) l.Text, Function(x) x.LabelText)
'option #2: DataBindings
Dim viewModel As Form1ViewModel = mvvmContext1.GetViewModel(Of Form1ViewModel)()
labelControl1.DataBindings.Add("Text", viewModel, "LabelText")

提示:如果需要將編輯器綁定到屬性,并選擇特定的更新模式,請使用標準數據綁定而不是SetBinding方法(請參閱數據綁定部分)。

POCO視圖模型中的更新通知

如果綁定屬性的值可以更改,那么將此更改通知相關屬性非常重要,為此向相關屬性發送更新通知。如果使用的是POCO ViewModels那么 DevExpress框架可以發送這些通知。

 在MVVM應用程序中,每個視圖都有一個相關的ViewModel。當使用DevExpress MVVM框架時,您應該為每個視圖添加一個MvvmContext組件,并將該組件指向與該視圖相關的ViewModel,我們建議在設計時通過組件的智能標簽菜單來完成這個操作。

mvvm


您還可以在代碼中使用ViewModelType屬性來完成此操作。

C#:

mvvmContext.ViewModelType = typeof(ViewModel);

VB.NET:

mvvmContext.ViewModelType = GetType(ViewModel)

 框架將分配給MvvmContext組件的每個ViewModel視為POCO (Plain Old CRL Object) ViewModel,POCO視圖模型有許多命名和語法約定,如果您遵循它們,框架就會預測您想要做什么并相應地采取行動。例如,更新通知自動發送到(從)“正確”聲明的屬性。

 創建一個 public virtual auto-implemented屬性,來允許框架向該屬性發送更新通知,還可以將屬性設置器聲明為protected。

C#:

public virtual string Name { get; set; }
public virtual int ID { get; protected set; }

VB.NET:

Public Overridable Property Name() As String
Public Overridable Property ID() As Integer
Get
Return _privateID
End Get
Protected Set(ByVal value As Integer)
_privateID = value
End Set
End Property

提示:框架會忽略帶有支持字段的屬性,為了能夠綁定這些屬性,可以用DevExpress.Mvvm.DataAnnotations.BindableProperty屬性來修飾它們。

C#:

using DevExpress.Mvvm.DataAnnotations;
//. . .
string name;
[BindableProperty]
public virtual string Name {
get { return name; }
set { name = value; }
}

VB.NET:

Imports DevExpress.Mvvm.DataAnnotations
'. . .
Private name_field As String
<BindableProperty>
Public Overridable Property Name() As String
Get
Return name_field
End Get
Set(ByVal value As String)
name_field = value
End Set
End Property

如果希望在每次更新屬性時調用特定的方法,請在同一屬性中指定該方法的名稱。

C#:

[BindableProperty(OnPropertyChangedMethodName= "OnLookUpEdit1ValueChanged")]
public virtual string Name {
// ...
}

VB.NET:

<BindableProperty(OnPropertyChangedMethodName:= "OnLookUpEdit1ValueChanged")>
Public Overridable ReadOnly Property Name() As String
' ...
End Property

 在Bindable Properties演示中,一個Label顯示了TextEdit編輯器的值。TextEdit被綁定到自動實現的虛擬Text屬性(存儲原始編輯器值),Label被綁定到Title(存儲格式化的“Text”值)。

 由于“Text”屬性遵循POCO命名約定,所以TextEdit-to-Text綁定是雙向的:當ViewModel屬性改變時,編輯器更新其值,當用戶修改編輯器文本時,ViewModel屬性更新其值。Label-to-Title綁定是單向的,因為“Title”屬性沒有公共集方法。在這個設置中,我們不需要對“Title”進行雙向綁定,因為用戶不能更改Label文本。

DevExpress VCL圖表控件

運行演示

C#:

//View code
var fluent = mvvmContext.OfType<ViewModel>();
fluent.SetBinding(editor, ed => ed.EditValue, x => x.Text);
fluent.SetBinding(label, lbl => lbl.Text, x => x.Title);

//ViewModel code
public class ViewModel {
public virtual string Text { get; set; }
public string Title {
get {
if(Text == null)
return "Title: (Null)";
if(Text.Length == 0)
return "Title: (Empty)";
if(string.IsNullOrWhiteSpace(Text))
return "Title: (Whitespace)";
return "Title: " + Text;
}
}
}

VB.NET:

'View code
Dim fluent = mvvmContext.OfType(Of ViewModel)()
fluent.SetBinding(editor, Function(ed) ed.EditValue, Function(x) x.Text)
fluent.SetBinding(label, Function(lbl) lbl.Text, Function(x) x.Title)

'ViewModel code
Public Class ViewModel
Public Overridable Property Text() As String
Public ReadOnly Property Title() As String
Get
If Text Is Nothing Then
Return "Title: (Null)"
End If
If Text.Length = 0 Then
Return "Title: (Empty)"
End If
If String.IsNullOrWhiteSpace(Text) Then
Return "Title: (Whitespace)"
End If
Return "Title: " & Text
End Get
End Property
End Class

注意:上面的代碼演示了“Title”和“Text”屬性之間的區別,但并不完整,demo模塊還使用屬性依賴來在“Text”發生變化時更新“Title”,運行演示可以查看完整的代碼。

綁定嵌套和非poco視圖模型的屬性

 如果您需要綁定一個嵌套的ViewModel屬性,使用DevExpress.Mvvm.POCO.ViewModelSource.Create方法來創建這個嵌套ViewModel的實例,您可以通過 parent ViewModel訪問它,視圖綁定語法使用相同的SetBinding方法。

運行演示

C#:

//Nested ViewModel
public class NestedViewModel {
public virtual string Text { get; set; }
}

//Parent ViewModel
public class ViewModelWithChild {
public ViewModelWithChild() {
Child = ViewModelSource.Create<NestedViewModel>();
}
public NestedViewModel Child {
get;
private set;
}
}

//View code
var fluent = mvvmContext.OfType<ViewModelWithChild>();
fluent.SetBinding(editor, ed => ed.EditValue, x => x.Child.Text);

VB.NET:

'Nested ViewModel
Public Class NestedViewModel
Public Overridable Property Text() As String
End Class

'Parent ViewModel
Public Class ViewModelWithChild
Public Sub New()
Child = ViewModelSource.Create(Of NestedViewModel)()
End Sub
Private privateChild As NestedViewModel
Public Property Child() As NestedViewModel
Get
Return privateChild
End Get
Private Set(ByVal value As NestedViewModel)
privateChild = value
End Set
End Property
End Class

'View code
Dim fluent = mvvmContext.OfType(Of ViewModelWithChild)()
fluent.SetBinding(editor, Function(ed) ed.EditValue, Function(x) x.Child.Text)

 如果不使用POCO模型,則框架不會自動發送更新通知。要在這種情況下發送通知,實現接口或創建-PropertyName-Changed事件,注意不能使用mvvmContext.ViewModelType屬性,您應該調用mvvmContext.SetViewModel方法將ViewModel實例傳遞給組件。

運行演示

C#:

//ViewModel code
public class ObjectWithTextAndTitle {
string textCore;

public string Text {
get { return textCore; }
set {
if(textCore == value) return;
textCore = value;
OnTextChanged();
}
}
protected virtual void OnTextChanged() {
RaiseTextChanged();
}
protected void RaiseTextChanged() {
var handler = TextChanged;
if(handler != null) handler(this, EventArgs.Empty);
}
public event EventHandler TextChanged;
}

//View code
mvvmContext.SetViewModel(typeof(ObjectWithTextAndTitle), viewModelInstance);
var fluent = mvvmContext.OfType<ObjectWithTextAndTitle>();
fluent.SetBinding(editor, ed => ed.EditValue, x => x.Text);

VB.NET:

'ViewModel code
Public Class ObjectWithTextAndTitle
Private textCore As String

Public Property Text() As String
Get
Return textCore
End Get
Set(ByVal value As String)
If textCore = value Then
Return
End If
textCore = value
OnTextChanged()
End Set
End Property
Protected Overridable Sub OnTextChanged()
RaiseTextChanged()
End Sub
Protected Sub RaiseTextChanged()
Dim handler = TextChangedEvent
If handler IsNot Nothing Then
handler(Me, EventArgs.Empty)
End If
End Sub
Public Event TextChanged As EventHandler
End Class

'View code
mvvmContext.SetViewModel(GetType(ObjectWithTextAndTitle), viewModelInstance)
Dim fluent = mvvmContext.OfType(Of ObjectWithTextAndTitle)()
fluent.SetBinding(editor, Function(ed) ed.EditValue, Function(x) x.Text)

數據綁定

 要將編輯器綁定到Model屬性,請將 添加到View并使用標準的數據綁定API,可選的參數允許您指定屬性是否在編輯器值更改時更新其值,以及(如果是)是應該立即發生還是在驗證編輯器時發生。

C#:

editor.DataBindings.Add(...);

VB.NET:

editor.DataBindings.Add(...)

 實體屬性綁定演示定義了一個自定義Entity類,此類的實例用作數據記錄并具有ID和Text字段,兩個數據字段都綁定到編輯器,并且BindingSource組件存儲活動Entity對象。

C#:

//View
mvvmContext.ViewModelType = typeof(ViewModel);
var fluentApi = mvvmContext.OfType<ViewModel>();
// Create a BindingSource and populate it with a data object.
//When a user modifies this object, the "Update" method is called
BindingSource entityBindingSource = new BindingSource();
entityBindingSource.DataSource = typeof(Entity);
fluentApi.SetObjectDataSourceBinding(entityBindingSource, x => x.Entity, x => x.Update());
// Data Bindings
idEditor.DataBindings.Add(
new Binding("EditValue", entityBindingSource, "ID"));
textEditor.DataBindings.Add(
new Binding("EditValue", entityBindingSource, "Text", true, DataSourceUpdateMode.OnPropertyChanged));

//ViewModel
public class ViewModel {
//...
public virtual Entity Entity {
get;
set;
}
//...
}

//Model
public class Entity {
public Entity(int id) {
this.ID = id;
this.Text = "Entity " + id.ToString();
}
public int ID { get; private set; }
public string Text { get; set; }
}

VB.NET:

'View
mvvmContext.ViewModelType = GetType(ViewModel)
Dim fluentApi = mvvmContext.OfType(Of ViewModel)()
' Create a BindingSource and populate it with a data object.
'When a user modifies this object, the "Update" method is called
Dim entityBindingSource As New BindingSource()
entityBindingSource.DataSource = GetType(Entity)
fluentApi.SetObjectDataSourceBinding(entityBindingSource, Function(x) x.Entity, Function(x) x.Update())
' Data Bindings
idEditor.DataBindings.Add(New Binding("EditValue", entityBindingSource, "ID"))
textEditor.DataBindings.Add(New Binding("EditValue", entityBindingSource, "Text", True, DataSourceUpdateMode.OnPropertyChanged))

'ViewModel
Public Class ViewModel
'...
Public Overridable Property Entity() As Entity
'...
End Class

'Model
Public Class Entity
Public Sub New(ByVal id As Integer)
Me.ID = id
Me.Text = "Entity " & id.ToString()
End Sub
Private privateID As Integer
Public Property ID() As Integer
Get
Return privateID
End Get
Private Set(ByVal value As Integer)
privateID = value
End Set
End Property
Public Property Text() As String
End Class

您也可以使用SetBinding方法。

C#:

fluent.SetBinding(idEditor, l => l.EditValue, x => x.Entity.ID);
fluent.SetBinding(textEditor, l => l.EditValue, x => x.Entity.Text);

VB.NET:

fluent.SetBinding(idEditor, Function(te) te.EditValue, Function(dl) dl.Entity.ID)
fluent.SetBinding(textEditor, Function(te) te.EditValue, Function(dl) dl.Entity.Text)

 但在這種情況下,就失去了設置必需的DataSourceUpdateMode的選項,該選項允許您防止過多的更新通知。

屬性依賴性

 屬性依賴關系是來自同一ViewModel的兩個屬性之間的關系,當一個屬性改變時則另一個屬性會更新它的值。

在MVVM Best Practices演示中,多個模塊演示了以下設置:

  1. 將兩個 TextEdit 控件綁定到 ViewModel “Operand1”和“Operand 2”屬性。
  2. 當用戶更改 TextEdit 值時,操作數屬性會刷新其值。
  3. 當操作數屬性更改時,它們會更新數字“結果”屬性(依賴項#1)。
  4. “Result”屬性更新字符串“ResultText”屬性(依賴項#2)。
屬性

對于使用示例UI的每個演示模塊,將視圖元素綁定到ViewModel屬性的代碼都是相同的。

C#:

mvvmContext.ViewModelType = typeof(MultViewModel);
var fluentAPI = mvvmContext.OfType<MultViewModel>();
fluentAPI.SetBinding(editor1, e => e.EditValue, x => x.Operand1);
fluentAPI.SetBinding(editor2, e => e.EditValue, x => x.Operand2);
fluentAPI.SetBinding(resultLabel, l => l.Text, x => x.ResultText);

VB.NET:

mvvmContext.ViewModelType = GetType(MultViewModel)
Dim fluentAPI = mvvmContext.OfType(Of MultViewModel)()
fluentAPI.SetBinding(editor1, Sub(e) e.EditValue, Sub(x) x.Operand1)
fluentAPI.SetBinding(editor2, Sub(e) e.EditValue, Sub(x) x.Operand2)
fluentAPI.SetBinding(resultLabel, Sub(l) l.Text, Sub(x) x.ResultText)

然而,每個模塊中的屬性依賴聲明都不同。

OnPropertyChanged方法

 在 POCO ViewModel 中,您可以聲明OnXChanged其中 X 是屬性名稱的方法,當相關屬性的值發生變化時,框架會調用這些方法。

運行演示

C#:

public class MultViewModel {
public virtual int Operand1 { get; set; }
public virtual int Operand2 { get; set; }
public virtual int Result { get; set; }
public virtual string ResultText { get; set; }

protected void OnOperand1Changed() {
UpdateResult();
}
protected void OnOperand2Changed() {
UpdateResult();
}
protected void OnResultChanged() {
UpdateResultText();
}
void UpdateResult() {
Result = Operand1 * Operand2;
}
void UpdateResultText() {
ResultText = string.Format("The result is: {0:n0}", Result);
}
}

VB.NET:

Public Class MultViewModel
Public Overridable Property Operand1() As Integer
Public Overridable Property Operand2() As Integer
Public Overridable Property Result() As Integer
Public Overridable Property ResultText() As String

Protected Sub OnOperand1Changed()
UpdateResult()
End Sub
Protected Sub OnOperand2Changed()
UpdateResult()
End Sub
Protected Sub OnResultChanged()
UpdateResultText()
End Sub
Private Sub UpdateResult()
Result = Operand1 * Operand2
End Sub
Private Sub UpdateResultText()
ResultText = String.Format("The result is: {0:n0}", Result)
End Sub
End Class
自定義更新方法

 如果您的更新方法未調用“On…Changed”,請使用該DevExpress.Mvvm.DataAnnotations.BindableProperty屬性告訴框架,當屬性值更改時應調用此方法。在下面的代碼示例中,DevExpress.Mvvm.POCO.RaisePropertyChanged是一個 DevExpress 擴展方法,它將更新通知發送到依賴屬性。

運行演示

C#:

public class SumViewModel {
[BindableProperty(OnPropertyChangedMethodName = "NotifyResultAndResultTextChanged")]
public virtual int Operand1 { get; set; }
[BindableProperty(OnPropertyChangedMethodName = "NotifyResultAndResultTextChanged")]
public virtual int Operand2 { get; set; }
public int Result {
get { return Operand1 + Operand2; }
}
public string ResultText {
get { return string.Format("The result is: {0:n0}", Result); }
}
protected void NotifyResultAndResultTextChanged() {
this.RaisePropertyChanged(x => x.Result);
this.RaisePropertyChanged(x => x.ResultText);
}
}

VB.NET:

Public Class SumViewModel
<BindableProperty(OnPropertyChangedMethodName := "NotifyResultAndResultTextChanged")>
Public Overridable Property Operand1() As Integer
<BindableProperty(OnPropertyChangedMethodName := "NotifyResultAndResultTextChanged")>
Public Overridable Property Operand2() As Integer
Public ReadOnly Property Result() As Integer
Get
Return Operand1 + Operand2
End Get
End Property
Public ReadOnly Property ResultText() As String
Get
Return String.Format("The result is: {0:n0}", Result)
End Get
End Property
Protected Sub NotifyResultAndResultTextChanged()
Me.RaisePropertyChanged(Function(x) x.Result)
Me.RaisePropertyChanged(Function(x) x.ResultText)
End Sub
End Class
屬性依賴

 使用 attribute 標記依賴屬性DevExpress.Mvvm.DataAnnotations.DependsOnProperties,請注意與前面的示例不同,下面的代碼僅使用一個依賴項:“ResultText”依賴于兩個“Operand”屬性,您無法使用此屬性創建鏈接依賴項。

C#:

public class MultViewModelEx {
public virtual int Operand1 { get; set; }
public virtual int Operand2 { get; set; }

[DependsOnProperties("Operand1", "Operand2")]
public string ResultText {
get { return string.Format("The result is: {0:n0}", Operand1 * Operand2); }
}
}

VB.NET:

Public Class MultViewModelEx
Public Overridable Property Operand1() As Integer
Public Overridable Property Operand2() As Integer

<DependsOnProperties("Operand1", "Operand2")>
Public ReadOnly Property ResultText() As String
Get
Return String.Format("The result is: {0:n0}", Operand1 * Operand2)
End Get
End Property
End Class

元數據類

 在此方法中,創建自定義更新方法并使用單獨的元數據類將屬性與這些方法鏈接起來。如果BindableProperty 屬性按名稱引用更新方法,則該OnPropertyChangedCall方法使用 lambda 表達式來檢索方法。當重命名自定義更新方法時,Metadata 類會顯示編譯錯誤。

C#:

//View Model code
[System.ComponentModel.DataAnnotations.MetadataType(typeof(Metadata))]
public class SumViewModel_MetaPOCO {
public virtual int Operand1 { get; set; }
public virtual int Operand2 { get; set; }
public virtual int Result { get; set; }
public string ResultText {
get { return string.Format("The result is: {0:n0}", Result); }
}
protected void NotifyResultAndResultTextChanged() {
Result = Operand1 + Operand2;
this.RaisePropertyChanged(x => x.Result);
this.RaisePropertyChanged(x => x.ResultText);
}
//Metadata class
public class Metadata : IMetadataProvider<SumViewModel_MetaPOCO> {
void IMetadataProvider<SumViewModel_MetaPOCO>.BuildMetadata(MetadataBuilder<SumViewModel_MetaPOCO> builder) {
builder.Property(x => x.Result)
.DoNotMakeBindable();
builder.Property(x => x.Operand1).
OnPropertyChangedCall(x => x.NotifyResultAndResultTextChanged());
builder.Property(x => x.Operand2).
OnPropertyChangedCall(x => x.NotifyResultAndResultTextChanged());
}
}
}

VB.NET:

<System.ComponentModel.DataAnnotations.MetadataType(GetType(Metadata))>
Public Class SumViewModel_MetaPOCO
Public Overridable Property Operand1() As Integer
Public Overridable Property Operand2() As Integer
Public Overridable Property Result() As Integer
Public ReadOnly Property ResultText() As String
Get
Return String.Format("The result is: {0:n0}", Result)
End Get
End Property
Protected Sub NotifyResultAndResultTextChanged()
Result = Operand1 + Operand2
Me.RaisePropertyChanged(Function(x) x.Result)
Me.RaisePropertyChanged(Function(x) x.ResultText)
End Sub
'Metadata class
Public Class Metadata
Implements IMetadataProvider(Of SumViewModel_MetaPOCO)

Private Sub IMetadataProviderGeneric_BuildMetadata(ByVal builder As MetadataBuilder(Of SumViewModel_MetaPOCO)) Implements IMetadataProvider(Of SumViewModel_MetaPOCO).BuildMetadata
builder.Property(Function(x) x.Result).DoNotMakeBindable()
builder.Property(Function(x) x.Operand1).OnPropertyChangedCall(Function(x) x.NotifyResultAndResultTextChanged())
builder.Property(Function(x) x.Operand2).OnPropertyChangedCall(Function(x) x.NotifyResultAndResultTextChanged())
End Sub
End Class
End Class

集合綁定

要使用數據源記錄填充多項目控件,請使用方法SetItemsSourceBinding。

C#:

var fluentApi = mvvmContext1.OfType<ViewModelClass>();
fluentApi.SetItemsSourceBinding(
Target
ItemSelector,
SourceSelector,
MatchExpression,
CreateExpression,
DisposeExpression,
ChangeExpression
);

VB.NET:

Dim fluentApi = mvvmContext1.OfType(Of ViewModelClass)()
fluentApi.SetItemsSourceBinding(Target ItemSelector, SourceSelector, MatchExpression, CreateExpression, DisposeExpression, ChangeExpression)

Target——需要填充的目標UI元素。

項目選擇器——一個表達式,用于檢索應該從數據源填充的UI元素的項目集合。

源選擇器——一個表達式,用于定位數據源,其項應用于填充目標。

 匹配表達式——將數據源項與目標子項進行比較的表達式。當更改或刪除數據源記錄時,框架將運行此表達式來確定是否應該更新相應的Target集合項。

創建表達式——當出現新的數據源記錄時,用于創建新的Target集合項的表達式。

處理表達式——當Target集合項的相關數據源記錄被刪除時,該表達式將對其進行處理。

更改表達式——指定當匹配表達式得出的目標集合項與數據源記錄不同時,如何更新目標集合項。

MVVM最佳實踐演示中,下面的代碼用自定義Entity類的對象填充一個列表框,SetBinding方法將編輯器的SelectedItem屬性與檢索相應Entity對象的ViewModel SelectedEntity屬性綁定在一起。

C#:

//View code
mvvmContext.ViewModelType = typeof(ViewModel);
var fluentApi = mvvmContext.OfType<ViewModel>();
fluentApi.SetItemsSourceBinding(
listBox,
lb => lb.Items,
x => x.Entities,
(item, entity) => object.Equals(item.Value, entity),
entity => new ImageListBoxItem(entity),
null,
(item, entity) => {
((ImageListBoxItem)item).Description = entity.Text;
}
);
fluentApi.SetBinding(listBox, lb => lb.SelectedValue, x => x.SelectedEntity);

//ViewModel code
public class ViewModel {
public virtual Entity SelectedEntity { get; set; }
public virtual ObservableCollection<Entity> Entities { get; set;}
protected void OnSelectedEntityChanged() {
//"Remove" is a custom ViewModel method that deletes a selected entity
this.RaiseCanExecuteChanged(x => x.Remove());
}
protected void OnEntitiesChanged() {
SelectedEntity = Entities.FirstOrDefault();
}
}

//Model code
public class Entity {
public Entity(int id) {
this.ID = id;
this.Text = "Entity " + id.ToString();
}
public int ID { get; private set; }
public string Text { get; set; }
}

VB.NET:

'View code
mvvmContext.ViewModelType = GetType(ViewModel)
Dim fluentApi = mvvmContext.OfType(Of ViewModel)()
fluentApi.SetItemsSourceBinding(
listBox,
Function(lb) lb.Items,
Function(x) x.Entities,
Function(item, entity) Object.Equals(item.Value, entity),
Function(entity) New ImageListBoxItem(entity),
Nothing,
Function(item, entity) CType(item, ImageListBoxItem).Description = entity.Text
)
fluentApi.SetBinding(listBox, Function(lb) lb.SelectedValue, Function(x) x.SelectedEntity)

'ViewModel code
Public Class ViewModel
Public Overridable Property SelectedEntity() As Entity
Public Overridable Property Entities() As ObservableCollection(Of Entity)
Protected Sub OnSelectedEntityChanged()
'"Remove" is a custom ViewModel method that deletes a selected entity
Me.RaiseCanExecuteChanged(Function(x) x.Remove())
End Sub
Protected Sub OnEntitiesChanged()
SelectedEntity = Entities.FirstOrDefault()
End Sub
End Class

'Model code
Public Class Entity
Public Sub New(ByVal id As Integer)
Me.ID = id
Me.Text = "Entity " & id.ToString()
End Sub
Private privateID As Integer
Public Property ID() As Integer
Get
Return privateID
End Get
Private Set(ByVal value As Integer)
privateID = value
End Set
End Property
Public Property Text() As String
End Class

觸發器

觸發器允許您在 ViewModel 屬性更改時修改 UI(視圖)。在DevExpress 演示中,一個復選框綁定到 ViewModel“IsActive”屬性,當此屬性的值更改時,觸發器會更改 UI 元素(標簽)的背景顏色。

C#:

//ViewModel code
public class ViewModel {
public virtual bool IsActive { get; set; }
}

//ViewModel code
var fluent = mvvmContext.OfType<ViewModel>();
fluent.SetBinding(checkEdit, c => c.Checked, x => x.IsActive);
fluent.SetTrigger(x => x.IsActive, (active) => {
if(active)
label.Appearance.BackColor = Color.LightPink;
else
label.Appearance.BackColor = Color.Empty;
});

VB.NET:

'ViewModel code
Public Class ViewModel
Public Overridable Property IsActive() As Boolean
End Class

'ViewModel code
Private fluent = mvvmContext.OfType(Of ViewModel)()
fluent.SetBinding(checkEdit, Function(c) c.Checked, Function(x) x.IsActive)
fluent.SetTrigger(Function(x) x.IsActive, Sub(active)
If active Then
label.Appearance.BackColor = Color.LightPink
Else
label.Appearance.BackColor = Color.Empty
End If
End Sub)
掃碼咨詢


添加微信 立即咨詢

電話咨詢

客服熱線
023-68661681

TOP
欧洲美女黑人粗性暴交 | 日本激情午夜在线电影观看 | 日韩免费一区二区三区在线播放 | 天天干夜夜操狠狠干 | 99精品国产免费久久国语 | 国产激情视频在线观看的 | 亚洲国产精品白丝观看 | 精品久久久久精品亚洲av | 高潮喷水视频一区二区三区 | 午夜成人黄色电影 | 欧美精品免 | 亚洲成a无码在线观看 | 亚洲日韩国产一区二区蜜桃 | 国产一区二区三区不卡视频在线 | 精品久久久久久中文字幕一区 | 特级毛片a级毛片免费播放 特级毛片a级毛片免费观看网站 | 69堂在线观看线无码视频 | 国产三级在线观看播放视频 | 日韩国产午夜一区二区三区 | 三年片在线观看免费大全电影 | 亚洲欧美日韩一区 | 国产成年女黄特黄 | 91制片厂制作果冻星空传媒 | 亚洲av无码成人精品区在线观 | 国产精品麻豆成人av网 | 99久久国语露脸精品对白 | 亚洲国产私拍精品国 | 欧美一区二区三区播放 | 国产老色批免费视 | 中文字幕韩国三级理论无码 | 国产午夜福利在线观看红一片 | 亚洲精品中文字幕不卡在线 | 国产成人午夜精品免费视频 | 无码一区精 | 国产办公室秘书 | 午夜手机福利国产2000 | 国产无套 | av午夜片在线观看 | 日本欧美亚洲综合久久久 | 91精品久久久久久久99蜜桃 | 福利姬液液酱:惊人喷水表演 | 国产成人无码aⅴ片在线观看导 | 国产精品白丝av嫩草影院 | 欧美激情一区二区亚洲专区 | 日本丰满岳乱妇在线观看 | 91精品亚洲欧美午夜福利 | 另娄专区欧美制服在线亚洲欧 | 午夜视频在线免费观看 | 十八禁在线观看视频播放免费 | 国产v高清v | av中文一区二区三区桃花岛 | 亚洲熟女精品一区二区成人 | 97碰碰碰 | 午夜天堂av免费在线观看 | 国产成人精品一区二三区2025 | 欧美成人在线视频 | 91麻豆国产福利精品 | 国产精品白丝喷浆 | 91偷拍一区二区三区精品 | 中文字幕精品久久久久人妻红杏1 | 99精品国产高清一区二区三区香蕉 | 国产自产一区二区三区视频在线 | 亚洲精品无播放 | 国产ts人妖在线观看 | 91大神精品全国在线 | 国产成人无码a区在线观看视频不卡 | 精品欧美久久99久久久另类专区 | 国产a∨天天免费观 | 国产真实av剧情露脸 | 日本三级韩国三级香港三级a级 | 亚洲一区综合在线播放 | 亚洲成在人线aⅴ中文字幕 亚洲成在人线av壁咚影院 | 99久久麻豆a | 精品一区二区不卡无码av | 亚洲av无码成人 | 91影视免费版安卓 | 成年站免费网站看v片在线 成欧美亚洲人一区二区三区免费 | 国产中文在线 | 国产亚洲精品 | 在线无码免费的毛片视频 | 亚洲日本中文字幕乱码在线 | 精品一区二区夜色 | 亚洲日韩精品一区二区三区 | 久久成人国产精品麻豆 | 日产精品一 | 欧洲肉欲k8播放毛片护士 | 99国产欧| 超级变态视频软件免费的 | 国产无码在线观看免费在 | 午夜福利理论片高清在线 | 成人欧美日韩视频一区 | 97人人模人人爽人人 | 国产一区成人在线视频 | 97制片厂爱豆传媒视频详情介绍 | 97夜夜澡人人双人人人喊 | 亚洲国产日韩一级精品视频网站 | 国产成人高清在线播放 | 日本xxx在线观看免费播放 | 国产麻豆91欧美一区二区 | 国产欧美国日产网站 | 欧美噜噜久久久xxx 欧美乱大 | 国产日韩三级综 | 亚洲午夜精品久久久天堂 | 精品国产乱码久久久久 | 国产在线高潮流 | 国产成人a∨大片在线 | 国产亚洲精品在线观看 | 99久热在线精品996热是什么 | 91小妖国产在线播放 | 国产成人麻豆精品午夜福利在 | 精品久久久无码人妻中文字幕 | 亚洲国产精品浪潮久久久av | 亚洲精品综合在线一区二区 | 国产旗袍丝袜在线观看视频 | 97夜夜澡人人爽人人喊18进 | a级国产片在线观看 | 亚洲精品色婷婷在线影院 | 成人va视频 | 国产日韩精品无码区免费专区国产 | 欧美成人精品一区二三区在线观看 | 国产在线观看超清无码视频 | 亚洲精品自拍愉拍第二页 | 99精品一区| 天天综合网站 | 精品动漫福利h视频在线观看 | 国产成人无码免费视频97 | 性无码一区 | 国产主播福利片在线观看 | 日本在线看片免费人成视频100 | 亚洲无码高清福利久久 | 换脸国产av一区二区三区 | 国产第一页久久亚洲欧美国产 | 91男女无遮挡猛进猛出免费午夜久久 | 国产乱视频在线观看 | 国产草莓精品国产av片国产 | 加勒比无码一区人妻 | 无码不卡一区二区三区在线 | 亚洲美女高潮视频免费 | 国产成人a亚洲精v品无码 | 欧美在线观看免费人成 | 国产成人av三级在线观看 | 午夜亚洲理论片在线观看 | 韩国成人网址 | 欧美成人三级经典中文字幕 | 国产成人aaaaaaa毛片 | 91精品人妻一区二区三区浪潮 | 成人国产精品日本在线观看 | 国产精品成aⅴ人片在线观看 | 91精品国产日韩91久久久久久 | 91精品国产全国免费观看蜜桃 | 国产精品乱码一区二区三区软件 | 91视频网 | 国产成人高清在线观看播放 | 国产成人无码区在线观看資源免費看 | 久久av高潮av无码av喷吹 | 亚洲av无码成人精品区天堂 | 精品无码专区免费播放 | 91福利| 性色aⅴ在线观看免费 | 无码一区二区三区av免费 | 人妻无码熟妇乱又伦精品视频 | 亚洲av色影在线 | 国产ts系列紫 | 国产欧美丝袜小视频 | 国产av一区二区三区蜜芽 | 国产成人精品在线免费观看 | 午夜天堂一区人妻 | 亚洲国产精品va在线观看香蕉 | 精品国产青草久久久久福利 | 亚洲熟女av一区二区三区 | 久久99精品久久久久久婷婷 | 超碰97人人做人人爱少妇 | 亚洲a∨无码男人的天堂 | 日韩精品一区二区三区视频 | 色欲av人妻精品一区二区三区图 | 无码人妻av一二区二区三区 | 精品一区二区三区影院在线 | 91嫩草免费国产永久入口 | 91美女视频 | 欧美在线观看一区 | 欧美无人区码 | 国内精品久久 | 97av麻豆蜜桃一区二区 | 午夜在线视频91精品 | 99re国产在线| 亚洲成aⅴ人片在线影院八 亚洲成av | 色欲av人妻精品一区二区三区图 | 国产在线观看91精品 | 亚洲综合视频在线观看h | 国产精品综| 98精品国产高清在线看入口 | 在线免费观看成年人视频 | 久久国产v一级毛多内射 | 无码国产福利av私拍 | 99久久精品国产麻豆 | 国产精品一卡二卡三卡 | 欧美性大 | 97精品国产高清自在线看超 | 国产爆乳无码一区二区麻豆 | 91精品国产91热久久久久福利 | 亚洲精品国产va在 | 国产精品一区二区久久宅男 | 无码av在线a√av在线 | 毛片无码一区二区三区a片视频 | 97精品人妻一区二区三区香蕉 | 国产欧美日韩亚洲一区二区三区 | 国产成人久久精品二三区麻豆 | 日韩人妻系列无码专区三级 | 97精品久久天干天天蜜 | 日本aⅴ精品一区二区三区久久 | 99久久综合精品五月天 | 日韩精品双飞一区二区三区 | 国产精品巨作av无遮挡 | 欧美大香线蕉线伊人久久 | 91嫩草国产 | 日本高清色视频www 日本高清视频 | 欧美一级黄色片免费看 | 国产精品欧美日韩一区二区 | 国产精品污www一区二区三区 | 国产成人综合网亚洲第一 | 亚洲一区二区三区四区在线观看 | 国产黑色丝袜在线观看一区 | 无码午夜国产成人影院 | 午夜被窝福利在 | 国产国语特级三级a毛片 | 欧美性久久 | 国产精品夜夜春夜夜爽久久 | 91香蕉国产| 在线成年女人免费视频播放器 | 精品3d动漫视频一区在线观看 | 国产成人高清在线资源 | 午夜福利看片 | 蜜臀成人av一区二区三区四区 | 中文亚洲日韩精品字幕不卡 | 日韩精品成人av高清在线观看 | 午夜在线亚洲男人午 | 国产伦精品一区二区三区视频 | 欧亚精品福利视频 | 国产a国产国产片 | 亚洲αv久久久噜噜噜噜噜 亚洲а∨精品天堂在线 | 国产日韩一区 | 中文字幕一区二区三 | 精品91| 91视频手机app官方下载 | 99精品欧美一区二区三区 | 国产激情a∨在线视频播放 国产激情av一区二区三区 | 麻豆毛片 | 91免费国产 | 麻豆国产hdxxxvideo| 99热免费版官方下载安装v2.0 | 人妻少妇久久久久久97人妻 | 亚洲国产精品无码98嫩草影院 | 中文字幕视频一区二区 | 无码精品福利一区二区三区 | 国产成人h在线视频 | 国产高清精 | 国产又爽又黄又嫩又猛又粗 | 国产欧美日韩综合精品二区 | 久久99精品国产99久久6 | 欧美高清视频www夜色资源网 | 国产午夜毛片一区二区三区 | 老司机精品视频一区二区 | 国产一卡二卡三卡四高清 | 国产乱人 | 国产一区二区视频在线观看 | 欧美性爱交换黄片 | 99爱国产精品免费精品在线 | 色约约精品免费 | 久久爱评论库第12章第1页 | 天天干狠狠干夜夜 | 无码一区二区三区av免费 | 午夜在线观看免费线无码视频 | 亚洲成a人在 | 韩国精彩电影电视剧推荐在线观看 | 欧美日韩国产码高清综合人成 | 99re热国产视频 | 天天综合色天天综合色hd | 国产超碰人人模人人爽人人添 | 亚洲综合一区国产精品 | 国产婷婷综合在线视频 | 亚洲成a人片在线观看 | 国内精品自线一区二区三区 | 国产精品秘一区二区三区 | 精品无码三级在线观看视频 | 国产91亚洲 | 中文无码精品一区二区三区 | 亚洲av无码电影网 | 国产伦精品一区二区三区网站 | 国产欧美不卡在线观看视频 | 午夜无码影片 | 99久久国产精品第一页 | 色视频综合无码一区二区三区 | 国产精品真实灌醉女在线播放 | 日韩无码av影片 | 国产日产欧产综合 | 国产精品一区高清在线观看 | 日韩欧美视频免费一区二区三区 | 91极品视频在线观 | 国产老太睡小伙子视频 | 日本一区四区不卡视频 | 国产成人精品在线 | 一区二区三区欧美视频 | 91精品国产高清久久福利 | 91福利国产在线观看香蕉 | 国产成人久久精品一区二区三区 | 国语自产精 | 成人午夜精品一区二区 | 一区二区三区免费高清视频 | 国产亚洲精品成 | 午夜播放器免费下载手机版v1.5 | 中文字幕奈奈美被公侵犯 | 欧美日韩| ww欧洲ww在线视频看 | 成人免费播放视 | 99久久99久久精品国产片果冻 | 四虎国产精品成人免费久久 | 国产成人在线视频 | 成人女人看片免费视频放人 | 亚洲国产av玩弄放荡人妇 | 欧美偷窥视频 | 国产91在线精品国自产拍 | 亚洲精品无码久久久影院相关影片 | 国产国产精品人在线视" | 国产成人av三级在线观看 | a片日韩美女视频免费 | 日韩精品一区二区三区中文 | 亚洲午夜一区二区三区在线观看 | 国产精品一区高清在线观看 | 成全影视免费观看 | 亚洲精品午夜久久aaa级久久久 | 无码一级中文字幕电影 | 九九在线中文字幕无码 | 果冻传媒的女主董小宛免费高清资源 | 国产精品不卡a∨在线 | 国产黄色在线 | 人妻少妇一区二区三区 | 精品一区二区三区蜜桃hd | 91xxx| 深夜网站在线观看 | 91看片淫黄大片.在线天堂 | 99爱视频99爱在线观看 | 无码毛片一区二区三区本码视 | 国产精品亚洲va在线观看 | 高清一级 | 黄色成人在线 | 91成人午夜精品福利院在线观看 | 亚洲欧美一| 国产一区2区 | 91看片免费高清版下载 | 亚洲国产精品无码98嫩草影院 | 亚洲变态另类av首页 | 国产综合精品 | 国产成人精品亚洲一区二区三区 | 波多野结衣无码在线观看 | 国产字幕制服中文在线 | 日本在线视频一区二区三区 | 国产成人亚洲综合无码ⅴ | 日韩av在线播放 | 中文字幕在线亚洲精品 | 亚洲熟妇无码一区二区三区导航 | 97亚洲熟妇自偷自 | 91久久精品无码一区二区三区 | 国产av无码国产av毛片 | 国产日韩欧美不卡在线二区 | 亚洲精品久久麻豆蜜桃 | 亚洲精品成人网 | 亚洲中文字幕无码久久精品1 | 国产精品av免费观看 | 国产九九精品 | 日韩视频免费 | 亚洲日韩中文字幕a∨ | 国产日本欧美在线一区二区 | 精品一区二区三区密臀在线 | 91香蕉短视频超碰97在线人 | 国产av激情久久无码天堂 | 97制片厂爱豆传媒视频在线 | 久久不见久久见免费影院www日本 | 99re成人精品免费视频 | 精品国内自产拍在线观看网站 | 人体内射精一区二区三区 | 无码成a∧人片在线播放 | 日韩欧美国产传媒第一区二区 | 一区二区三区国 | 天天干夜夜操狠狠干 | 欧美av色香蕉一区二区久久 | 精品国产专区91在线尤物 | 91精品无人区麻豆乱码4区开放时间 | 亚洲精品欧美在 | 国产a区| 在线好吊色视频 | av天堂最新手机网址无码窝 | 91亚洲一 | 国产亚洲日韩在线a不卡 | 国产精品精品国产免费电影 | 精品国产麻豆 | 日韩中文字幕无码 | 在线观看国产精品日韩av | 国产亚洲精久久久久久无码 | 狠狠色综合网站久 | 久久99精品 | 99精品热6080yy久久 | 韩国三级中| 国产à爽一区二区久久久 | 99爱在线精品视频免费观看9 | 国产伦精品一区三区视频 | 精品欧美成人高清在线观看观看视频 | 少妇一晚 | 欧美日韩在线一区二区三区 | 在线观看亚洲av日韩av | 无码人妻精品一区二区蜜桃91 | 少妇三级| 国产a∨国片精品一区二区 国产a∨精品一区二区三区不卡 | 97精品国产97久久久久 | 国产放荡| 无码一区二区三区老色鬼 | 亚洲国产中文高清在线 | 精品无人区乱码一区二区三区手机 | 九一传媒公司制作网站 | 91麻豆精品国产一区色欲噜噜噜 | 中文字幕爆乳巨爆乳系列 | 亚洲精品亚洲九 | 国产一区二区三区免费看 | 欧美激情一区二区久久久 | 国内不卡1区2区 | 波多野结衣乳巨码无在线观看 | 99久久婷婷国产综合精品青草免 | 国产成人精品久久久久 | 日本黄色片在线视频 | 91精品人妻人人做人碰人人爽 | 国产一区二区三区在线观看免费 | 人人妻人人澡人人爽人人精品97 | 国产超碰人人模人人爽人人喊 | 国产精品原创巨作无遮挡 | 国产人成视频免费看 | 成a人片亚洲日本久久 | 精品精品国产高清a毛片牛牛 | 国产高清亚洲精品 | 日本免费一区精品推荐 | 中文字幕色av一区二区三区 | 中文字幕乱码中文字幕电视剧 | 国产在线不卡精品网站 | 日本深夜福利19禁在线播放 | 99久久免费精品视频 | 亚洲av性色在线观看 | 国产精品自产拍在线观看中文 | 91导航小污女导航天天夜夜爽 | 欧美成人黄片在线观看 | 少妇免费三级在线观看 | 在线欧美精品视频在线观看 | 国产爆乳无码一区二区麻豆 | 国产免费一区二区三区香蕉精 | 午夜a级理论片左线播放 | 99精品视频在线观看 | 日本免费一区二区三区最新 | 熟妇区毛片蜜桃 | 国产精品毛片va一区二区三区 | 91伊人国产 | 亚洲综合偷自成人网第页色 | 91久久精品在这里色伊人6884 | 午夜久久久精品 | 91极品尤物电影完整版在线观看 | 国产一区二区三区四区五区tv | 波多野结衣av高清 | 精品不卡秀视频一区二区在线观看 | 精品国产av丁香六月无码 | 国产在线精品一区二区 | 国产精品美女一区二区三区 | 中文午夜乱理片无码av | 久久97人人 | 亚洲二区三 | 亚洲av无码乱观看明星换脸va | 99久久婷婷国产综合精品青草漫 | 老熟女高潮一区二区三区 | 爆乳无码一区二区在线观看ai | 亚洲一区二区三区四区五区六区 | av男人的天堂在线观看第三 | 国产成人无码aⅴ片在线观看导 | 激情综合婷婷 | 国产免费福利视频一区二区 | 日韩无码av片亚洲成人精品网站 | 亚洲精品视频久久 | 狠狠色噜噜狠狠狠888米奇视频 | 亚洲精品中文字幕无码久久久久久 | 狠狠色狠色综 | 成人区精品一区二区毛片不卡 | 亚洲一区二区三区无 | 97水蜜桃视频在线观看 | 丰满人妻系列无码专区 | 午夜福利免费0948视频 | 日本婷婷天堂吧 | 99久久久久免费精品国产 | 日韩电影一区二区三区红桃 | 国内精品视频成人一区二区 | 欧美午夜片欧美 | 国产成a人片在线观看 | 国产成人综合久久精品推荐 | 国产成人精品一区二区不卡 | 日韩精品高清在线 | 九九九九九在线精品区 | 综合色区亚洲熟妇另类 | 亚洲成a人片在线观看天堂无码 | 午夜tv| 丰满少妇被猛烈进入 | 国产白丝喷水娇喘视 | 国产亚洲精品观看91在线 | 香蕉久久aⅴ一区二区三区 香蕉久久av一区二区三区 | h动漫精品网站网 | 三级电影韩国中文字幕久久 | 日本ⅴ精品一区二区三区久久 | 亚洲国产精品一区 | 亚洲av综合a| av性天堂网 | 日韩一卡2卡3卡4卡 日韩一卡二卡三 | 中文字幕精品无码亚洲幕 | 一区二区三区精品视频日本 | 91亚洲国产福利在线看 | 国产亚洲av片在线观看18女人 | 亚洲一区二 | 亚洲av日韩av高潮无码专区 | 精品视频免费在线 | 日本动漫在中国的传播学研究 | 精品黑人一区二区三区 | 亚洲无码精品免费一区 | 91久久国产成人免费网站 | 亚洲国产欧美不卡在线 | 国产精品久久久久久一级毛片 | 日本高清一区二区三区不卡视频 | 日日久久一区二区三区 | 深夜福利视频大全在线观看 | 99久久精品无码专区 | 国产精品蜜臀久久久av | 成人在线精品视频 | 中文字幕av日韩精品一区二区 | 国产乱女婬av麻豆国产 | 亚洲午夜国产精品 | 国产成人高清 | 亚洲福利在线老司机 | 精品久久久一区无 | 亚洲av综合色区无码一二三区 | 国产精品三级在线观看无码 | 国产精品亚洲欧美一区麻豆 | 久本草在线中文字幕 | 亚洲综合在线播放 | 91精品视频播放 | 亚洲国产精品自在在线观看 | 成年人在线播放视频 | 国产成人精品高清国产三级 | 成年男女免费视频网站 | 欧美视频一区二区三区 | 日韩激情五码视频中文字幕 | 97人妻免费视频 | 国产乱子伦| 无码任你躁久久久久久老妇双奶 | 欧美成人免费观看 | 久久99网 | 99福利资源久久福利资源 | 97人妻人人做人碰人人爽 | 国产黄色片在 | 91香蕉成人免费网站 | 亚洲国产www | 日韩精品一区二区三区高清免费 | 国产美女视频久久午夜 | 中文字幕亚韩在线综合 | 日本中文字幕亚洲专区 | 最新中文字幕强奸乱伦亚洲五码 | 97视频人人看人人做首页一97碰 | 亚洲综合区夜久久无码精品 | 午夜人成在线观看深夜两性视频试看 | 国产精品一区二区三区免费视频 | 国产欧美日 | 亚洲成在线播放va | 成人a毛片免费观看网站 | 91大神在线 | 日韩在线观看高清视频 | 成人在线免费观看大全 | 国产精品成熟 | 深夜久久aaaaa级毛片免费看 | 成人久久久 | 欧美高清视频一区 | 国产综合内射日韩久 | 黄桃av无码免费一区二区三区 | 成人性三级欧美在线观看 | 国产高清成人片免费播放18禁 | 亚洲精品中文字幕久久久久 | 日韩欧美国产一区二区三区免费 | 色色综合资源站 | 无码精品人妻一区二区三区影院 | 亚洲一区日 | 国产一线二线在线观看成人av | 国产欧美一区二区三区精品 | 成年美女黄网站色奶头大全 | 欧美成人精品福利视频 | 中无码人妻丰满熟妇啪啪 | 日韩欧美自 | 国产日韩视频毛片 | 国产精品国产三级国产专不∫ | 91免费看片| 日韩激情一级毛片久久久久 | 亚洲乱码 | 成年无码专区在线蜜芽tv | 亚洲精品久久久中文字幕痴女 | 91伊人影院 | 国产精品天天在线午夜更新 | 91在线精品播放 | 国产一区二区在线 | 韩国三级理论无码电影在线观看 | 日韩一区国产二 | 少妇人妻偷人 | 亚洲五月天激情在线观看 | 国产又爽又黄又嫩又猛又粗 | 国产免费一区二区三区在线观看 | 午夜精品久久久久久中宇 | 亚洲成?人片在线观看无码专区 | 国产精品亚洲第一区在线 | 日本特色特黄久久久久久 | 国产大香蕉在线免费观看 | 亚洲精品视频中文 | 中文亚洲av片在线观看无码 | 97碰碰碰人妻无码视频免费 | 一区二区三区av波多野结衣 | 少妇高潮喷水在线观看 | 国产女人 | 国产福利精品87福利电影 | 国产日产亚洲精品 | 在线视频精 | 国产偷规视频在线观看 | 亚洲日韩一页精品发布 | 国产精品亚洲第一区在线 | 亚洲六区| 精品无码一区 | 99香蕉国 | 国内精品久久久久久99蜜桃 | 精品人妻少妇一区二区大牛影视 | 91成人试看福 | 国产av无码专区亚洲av中文 | 人与动物ppt免费模板大全 | 国产剧情av巨作在线观看 | 99精品日本二 | 欧美亚洲精品中文字幕乱码免费 | 午夜日韩欧美在线观看 | 自在自线亚洲а | 一区二区三区精密机械 | 91久久人人爽亚洲精品美女 | 99久久久精品免费观看国产 | 99久久久免费国产精品 | 精品国产乱码久久久久 | 怡春院怡红院国产a∨ | 亚洲成a人片在线观看无码3d | 无码精品一区二区三区在线 | 91po国产在线精 | 97亚洲熟妇自偷自拍另类图片 | 久久99re热在线播放 | 国产a∨国片精品白丝美女视频 | 日韩精品一区二区最新 | 尤物视频不卡在线观看 | 亚洲精品中文字幕乱码三区一二 | 成年免费a级毛片免费看无码 | 国产丶欧美丶日韩丶不卡影视 | 一级特黄高清aaa | 国产在线自在拍91有声 | 国产91色综合 | 亚洲一区二区+在线播放 | 亚洲美女高潮久久 | 国产精品二 | 99re在线视频精品观看9 | 激情婬妇动态视频无遮挡 | 欧美精品视频一区二区三区 | 99精品国产在热久久婷婷 | 欧美日韩在线播放 | 无码成a∧人片在线播放 | 国产高清无码在线视频播放 | 午夜欧美日韩精品久久久久久 | 国产91在线精品福利 | 91精品露脸在 | 国产激情免费 | 国产高清专区 | 亚洲国产av一区二区三区 | 国产成人av无码网站久久 | 午夜亚洲国产日本电影一区二区三区 | 国产厨房乱子 | 国产成人精品午夜视频 | 无码专区午夜福利在线观看 | 国产精品91av在线观看 | 国产激情片免费在线观看 | 怡红院怡春院欧美精品 | 免费无码久久成人网站入口 | 国产成人激烈叫床声视频对白 | 成人香蕉 | 午夜三级国产精品理论三级 | 99久久国产综合精麻豆 | 欧美成人观看免费全部完 | 中文字幕免费不卡一区二区 | 国产成人精品一区二区三区… | 狠狠色噜噜 | 国产成人精品亚洲日本在线 | 中文字幕中字幕亚洲 | 无遮挡韩国在线观看 | 亚洲成av人片在www鸭子 | 91精品国产成人网在线观看 | 日本强不 | 无码国产69精品久久久孕 | 国内精品久 | 欧美人与 | 国产av一级毛片 | 国内少妇人妻 | 亚洲av无码国产一区二区三区 | 日韩在线一区二区三区视频 | 亚洲国产一成久久精品国产成人综合 | 99精品亚洲| 国产尤物精品视频 | 亚洲国产日韩欧美一区二区三区 | 国产精品一区二区在线观看 | 精品一区二区三区四区五区六己 | 国产一级毛片视频国产 | 91免费国产在线观看蜜桃 | 办公室爆乳在线 | 日韩在线播放中文字幕 | 熟妇人妻 | 日韩av毛片不卡无码免费 | 香蕉视频在线观看福利国产 | 精品香蕉在线视频专区 | 国产精品国产自线 | 国内精品自产拍在线观看 | 日韩福利视频导航入口 | 少妇高潮大叫好爽 | 精品欧美一区二区三区 | 亚洲av成人无码一 | 亚洲理论电影在线观看 | 亚洲日韩精品a∨片无码不卡 | 国产精品高潮久久久久无码av | 日本久久综合欧 | 欧美一二三区 | 日韩一级特黄av毛片 | 一区二区三区日韩 | 91香蕉成人app最新版官网 | 国产在线精品2区 | 91人妻人人澡人人爽人人玩 | 欧美婷婷 | 无码国模国 | 91高清国产 | 欧美孕妇xxxx做受欧美88 | 亚洲国产成人精品一区刚刚 | 日本高清视频一区二区 | 丰满少妇高潮惨叫久久久一 | 亚洲v国产v天堂网 | 成人在免费视频手机观看网站 | 97久久精品一区二区三区剧情介绍 | 日本一区二区在线免费观看 | 日韩精品一区二区三区视频 | 97a蜜桃品味夏日的甜美与香气 | 日韩欧美中文字幕54av | 在线日韩av免费永久观看 | 精品国产乱子伦一区二区三区 | 欧美亚洲国产日韩一二三区 | 国产三级精品三级在线观看 | 老司机午夜精品99久久免费 | 久久99精品久久久久久国产 | 精品国产精品亚洲一本大道 | 人妻少妇久久中文字幕一区二区+ | 99re视频热这里只有精品 | 午夜福利精品视频在线 | 久久成人一区 | 性欧美欧美巨大69 | 亚洲乱妇熟| 国产aⅴ一区二区三区精品 国产aaaa | 国产一级特黄大片在线观看 | 日韩在线亚洲欧美另类青青 | 精品久久免费观看 | 爆乳少妇在办公室在线观看 | a级黑粗| 国产一级天堂无码 | 精品欧美成人高清在线观看 | 日韩高清在线观看永久 | 国产无码高清在线观看 | 92午夜福利在线播放 | 久久av无码 | 91麻豆国产视频一级片 | 福利姬液液酱:惊人喷水表演 | 天天插狠狠干 | 人妻av无码中文专区久久 | 91大神一区二区三区视频 | 午夜一区二区免费福利麻豆 | 国产av一区二区三区天堂综合网 | 91亚洲国产第一精品 | 成人精品久久国产av | 国产三级深夜精品视频 | 国产剧情台湾swag突袭计划 | 精品国产国偷自产在线观看 | 少妇大叫太大太爽受不了 | 中文国产高清综合乱色视频在线播放 | 久爱免费观 | 精品久久久久无码专区 | 午夜精品久久久久久久影视 | 亚洲无码小视频 | 欧美熟妇性开放 | 狠狠躁日日躁夜夜躁2025麻豆 | 日本一区中 | 91香蕉国产线在线观看免费网友评价 | 亚洲欧美日韩精品久久 |