欧美亚洲自拍偷拍_日本一区视频在线观看_国产二区在线播放_亚洲男人第一天堂

二維碼
企資網(wǎng)

掃一掃關(guān)注

當(dāng)前位置: 首頁 » 企資快訊 » 匯總 » 正文

DevExpress_WinForm_MVVM

放大字體  縮小字體 發(fā)布日期:2021-11-16 13:46:59    作者:葉梓盛    瀏覽次數(shù):10
導(dǎo)讀

根據(jù)您綁定得屬性,存在以下三種可能得情況:常規(guī)綁定 - ViewModel屬性綁定到任何不可感謝得View元素屬性。由于該元素不可感謝,因此您無需將更新通知發(fā)送回綁定屬性(單向綁定)。數(shù)據(jù)綁定 - Model屬性(數(shù)據(jù)字段)

根據(jù)您綁定得屬性,存在以下三種可能得情況:

  • 常規(guī)綁定 - ViewModel屬性綁定到任何不可感謝得View元素屬性。由于該元素不可感謝,因此您無需將更新通知發(fā)送回綁定屬性(單向綁定)。
  • 數(shù)據(jù)綁定 - Model屬性(數(shù)據(jù)字段)綁定到感謝器屬性。如果用戶可以更改感謝器值,則需要更新綁定屬性(雙向綁定)。
  • 屬性依賴 - 來自同一個(gè)ViewModel得兩個(gè)屬性被綁定。

    DevExpress Universal Subscription自家蕞新版免費(fèi)下載試用,歷史版本下載,在線文檔和幫助文件下載-慧都網(wǎng)

    屬性依賴

    屬性依賴是來自同一個(gè)ViewModel得兩個(gè)屬性之間得關(guān)系,當(dāng)一個(gè)屬性發(fā)生變化時(shí),另一個(gè)屬性會(huì)更新其值。

    在“MVVM 可靠些實(shí)踐”演示中,多個(gè)模塊演示了以下設(shè)置:

  • 兩個(gè)TextEdit控件綁定到ViewModel“Operand1”和“Operand2”屬性。
  • 當(dāng)用戶更改 TextEdit 值時(shí),操作數(shù)屬性會(huì)刷新其值。
  • 當(dāng)操作數(shù)屬性更改時(shí),它們會(huì)更新數(shù)字 “Result”屬性(依賴項(xiàng) #1)。
  • “Result”屬性更新字符串“ResultText”屬性(依賴項(xiàng)#2)。

    對于使用示例 UI 得每個(gè)演示模塊,將 View 元素綁定到 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)

    然而,屬性依賴在每個(gè)模塊中得聲明都不同。

    onPropertyChanged 方法

    在POCO ViewModels中,您可以聲明OnXChanged方法,其中 X 是屬性名稱。 當(dāng)相關(guān)屬性得值發(fā)生變化時(shí),框架會(huì)調(diào)用這些方法。

    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 MultViewModelPublic Overridable Property Operand1() As IntegerPublic Overridable Property Operand2() As IntegerPublic Overridable Property Result() As IntegerPublic Overridable Property ResultText() As StringProtected Sub OnOperand1Changed()UpdateResult()End SubProtected Sub OnOperand2Changed()UpdateResult()End SubProtected Sub onResultChanged()UpdateResultText()End SubPrivate Sub UpdateResult()Result = Operand1 * Operand2End SubPrivate Sub UpdateResultText()ResultText = String.Format("The result is: {0:n0}", Result)End SubEnd Class

    自定義更新方法

    如果您得更新方法未被稱為“On...Changed”,請使用 DevExpress.Mvvm.DataAnnotations.BindableProperty 屬性告訴框架它應(yīng)該在屬性值更改時(shí)調(diào)用此方法。 在下面得代碼示例中,DevExpress.Mvvm.POCO.RaisePropertyChanged 是一個(gè) DevExpress 擴(kuò)展方法,它將更新通知發(fā)送到依賴屬性。

    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 IntegerPublic Readonly Property Result() As IntegerGetReturn Operand1 + Operand2End GetEnd PropertyPublic Readonly Property ResultText() As StringGetReturn String.Format("The result is: {0:n0}", Result)End GetEnd PropertyProtected Sub NotifyResultAndResultTextChanged()Me.RaisePropertyChanged(Function(x) x.Result)Me.RaisePropertyChanged(Function(x) x.ResultText)End SubEnd Class

    依賴屬性

    使用 DevExpress.Mvvm.DataAnnotations.DependsonProperties 屬性標(biāo)記依賴屬性。 請注意,與前面得示例不同,下面得代碼僅使用一個(gè)依賴項(xiàng):“ResultText”取決于兩個(gè)“Operand”屬性,您不能使用此屬性創(chuàng)建鏈?zhǔn)揭蕾図?xiàng)。

    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 MultViewModelExPublic Overridable Property Operand1() As IntegerPublic Overridable Property Operand2() As Integer<DependsonProperties("Operand1", "Operand2")>Public Readonly Property ResultText() As StringGetReturn String.Format("The result is: {0:n0}", Operand1 * Operand2)End GetEnd PropertyEnd Class

    metadata類

    在這種方法中,您創(chuàng)建自定義更新方法并使用單獨(dú)得元數(shù)據(jù)類將屬性與這些方法鏈接起來。 如果 BindableProperty 屬性按名稱引用更新方法,則 onPropertyChangedCall 方法使用 lambda 表達(dá)式來檢索方法。 重命名自定義更新方法時(shí),元數(shù)據(jù)類顯示編譯錯(cuò)誤。

    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 classpublic 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_metaPOCOPublic Overridable Property Operand1() As IntegerPublic Overridable Property Operand2() As IntegerPublic Overridable Property Result() As IntegerPublic Readonly Property ResultText() As StringGetReturn String.Format("The result is: {0:n0}", Result)End GetEnd PropertyProtected Sub NotifyResultAndResultTextChanged()Result = Operand1 + Operand2Me.RaisePropertyChanged(Function(x) x.Result)Me.RaisePropertyChanged(Function(x) x.ResultText)End Sub'metadata classPublic Class metadataImplements ImetadataProvider(Of SumViewModel_metaPOCO)Private Sub ImetadataProviderGeneric_Buildmetadata(ByVal builder As metadataBuilder(Of SumViewModel_metaPOCO)) Implements ImetadataProvider(Of SumViewModel_metaPOCO).Buildmetadatabuilder.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 SubEnd ClassEnd Class

    集合綁定

    要使用數(shù)據(jù)源記錄填充多項(xiàng)目控件,請使用 SetItemsSourceBinding 方法。

    C#

    var fluentApi = mvvmContext1.OfType<ViewModelClass>();fluentApi.SetItemsSourceBinding(TargetItemSelector,SourceSelector,Matchexpression,Createexpression,Disposeexpression,Changeexpression);

    VB.NET

    Dim fluentApi = mvvmContext1.OfType(Of ViewModelClass)()fluentApi.SetItemsSourceBinding(Target ItemSelector, SourceSelector, Matchexpression, Createexpression, Disposeexpression, Changeexpression)

  • Target - 您需要填充得目標(biāo) UI 元素。
  • Item Selector - 一個(gè)表達(dá)式,用于檢索應(yīng)從數(shù)據(jù)源填充得 UI 元素得項(xiàng)目集合。
  • Source Selector - 定位數(shù)據(jù)源得表達(dá)式,其項(xiàng)目應(yīng)用于填充目標(biāo)。
  • Match expression -將數(shù)據(jù)源項(xiàng)與目標(biāo)子項(xiàng)進(jìn)行比較得表達(dá)式。 當(dāng)您更改或刪除數(shù)據(jù)源記錄時(shí),框架會(huì)運(yùn)行此表達(dá)式以確定是否應(yīng)更新相應(yīng)得 Target 集合項(xiàng)。
  • Create expression - 出現(xiàn)新數(shù)據(jù)源記錄時(shí)創(chuàng)建新目標(biāo)集合項(xiàng)得表達(dá)式。
  • Dispose expression - 一個(gè)表達(dá)式,當(dāng)它得相關(guān)數(shù)據(jù)源記錄被刪除時(shí)處理一個(gè) Target 集合項(xiàng)。
  • Change expression - 指定當(dāng)匹配表達(dá)式得出此項(xiàng)目與數(shù)據(jù)源記錄不同時(shí)如何更新目標(biāo)集合項(xiàng)目。

    在 MVVM 可靠些實(shí)踐演示中,以下代碼使用自定義實(shí)體類得對象填充列表框。 SetBinding 方法將感謝器得 SelectedItem 屬性與檢索相應(yīng)實(shí)體對象得 ViewModel SelectedEntity 屬性綁定。

    C#

    //View codemvvmContext.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 codepublic 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 entitythis.RaiseCanExecuteChanged(x => x.Remove());}protected void onEntitiesChanged() {SelectedEntity = Entities.FirstOrDefault();}}//Model codepublic class Entity {public Entity(int id) {this. = id;this.Text = "Entity " + id.ToString();}public int { get; private set; }public string Text { get; set; }}

    VB.NET

    'View codemvvmContext.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 codePublic Class ViewModelPublic Overridable Property SelectedEntity() As EntityPublic Overridable Property Entities() As ObservableCollection(Of Entity)Protected Sub onSelectedEntityChanged()'"Remove" is a custom ViewModel method that deletes a selected entityMe.RaiseCanExecuteChanged(Function(x) x.Remove())End SubProtected Sub onEntitiesChanged()SelectedEntity = Entities.FirstOrDefault()End SubEnd Class'Model codePublic Class EntityPublic Sub New(ByVal id As Integer)Me. = idMe.Text = "Entity " & id.ToString()End SubPrivate private As IntegerPublic Property () As IntegerGetReturn privateEnd GetPrivate Set(ByVal value As Integer)private = valueEnd SetEnd PropertyPublic Property Text() As StringEnd Class

    觸發(fā)器

    觸發(fā)器允許您在 ViewModel 屬性更改時(shí)修改 UI(視圖)。 在 DevExpress 演示中,復(fù)選框綁定到 ViewModel “IsActive”屬性。 當(dāng)此屬性得值更改時(shí),觸發(fā)器會(huì)更改 UI 元素(標(biāo)簽)得背景顏色。

    C#

    //ViewModel codepublic class ViewModel {public virtual bool IsActive { get; set; }}//ViewModel codevar 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;elselabel.Appearance.BackColor = Color.Empty;});

    VB.NET

    'ViewModel codePublic Class ViewModelPublic Overridable Property IsActive() As BooleanEnd Class'ViewModel codePrivate 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 Thenlabel.Appearance.BackColor = Color.LightPinkElselabel.Appearance.BackColor = Color.EmptyEnd IfEnd Sub)

    DevExpress WinForm

    DevExpress WinForm擁有180+組件和UI庫,能為Windows Forms平臺創(chuàng)建具有影響力得業(yè)務(wù)解決方案。DevExpress WinForms能完美構(gòu)建流暢、美觀且易于使用得應(yīng)用程序,無論是Office風(fēng)格得界面,還是分析處理大批量得業(yè)務(wù)數(shù)據(jù),它都能輕松勝任!

  •  
    (文/葉梓盛)
    免責(zé)聲明
    本文僅代表作發(fā)布者:葉梓盛個(gè)人觀點(diǎn),本站未對其內(nèi)容進(jìn)行核實(shí),請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問題,請及時(shí)聯(lián)系我們刪除處理郵件:weilaitui@qq.com。
     

    Copyright ? 2016 - 2025 - 企資網(wǎng) 48903.COM All Rights Reserved 粵公網(wǎng)安備 44030702000589號

    粵ICP備16078936號

    微信

    關(guān)注
    微信

    微信二維碼

    WAP二維碼

    客服

    聯(lián)系
    客服

    聯(lián)系客服:

    在線QQ: 303377504

    客服電話: 020-82301567

    E_mail郵箱: weilaitui@qq.com

    微信公眾號: weishitui

    客服001 客服002 客服003

    工作時(shí)間:

    周一至周五: 09:00 - 18:00

    反饋

    用戶
    反饋

    欧美亚洲自拍偷拍_日本一区视频在线观看_国产二区在线播放_亚洲男人第一天堂

          9000px;">

                国产麻豆日韩欧美久久| 亚洲欧美色综合| 亚洲女子a中天字幕| eeuss鲁片一区二区三区 | 亚洲欧美精品午睡沙发| 国产夫妻精品视频| 亚洲三级免费观看| 91精品国产综合久久久久久 | 日韩午夜中文字幕| 狠狠色丁香婷综合久久| 国产精品国产三级国产普通话蜜臀| 波多野结衣欧美| 亚洲国产精品一区二区尤物区| 日韩欧美国产高清| 色94色欧美sute亚洲13| 久久国产精品第一页| 亚洲欧美一区二区久久| 2020国产精品自拍| 欧美裸体一区二区三区| 波多野结衣在线aⅴ中文字幕不卡| 三级久久三级久久久| 中文字幕视频一区| 久久久综合视频| 欧美日韩成人综合在线一区二区| 久久国产尿小便嘘嘘尿| 一区二区三区在线观看视频| 国产亚洲成av人在线观看导航| 欧美一三区三区四区免费在线看 | www.99精品| 久久99精品一区二区三区| 亚洲1区2区3区视频| 国产精品国产三级国产a| 欧美xxxxxxxx| 日韩欧美一区二区在线视频| 91免费国产在线| www.欧美日韩| 成人国产亚洲欧美成人综合网| 蜜臀久久99精品久久久画质超高清| 一区二区在线电影| 亚洲人午夜精品天堂一二香蕉| 国产精品日韩成人| 国产精品乱码人人做人人爱| 日韩欧美国产一区二区在线播放| 欧美日韩你懂得| 91福利国产精品| 97se狠狠狠综合亚洲狠狠| 国产成人午夜精品影院观看视频 | 蜜臀av国产精品久久久久 | 亚洲精品一二三四区| 国产精品福利在线播放| 国产精品国产三级国产普通话99 | 亚洲综合激情小说| 亚洲一区二区在线视频| 一区二区三区成人| 亚洲成a天堂v人片| 亚洲精品一线二线三线无人区| 欧美午夜精品电影| 免费欧美高清视频| 久久er精品视频| 狠狠色狠狠色综合系列| 国产一区二区在线看| 六月婷婷色综合| 久久电影国产免费久久电影| 视频一区在线播放| 五月婷婷欧美视频| 日本最新不卡在线| 国产成人综合在线| av在线不卡网| 欧美中文字幕一二三区视频| av亚洲精华国产精华精| 成人av在线看| 欧美精品视频www在线观看| 欧美电影在线免费观看| 久久伊人中文字幕| 1024成人网色www| 国产精品久久网站| 天天影视网天天综合色在线播放| 免费高清视频精品| 99久久伊人网影院| 91精品国产一区二区三区蜜臀| 久久综合给合久久狠狠狠97色69| 国产精品剧情在线亚洲| 喷水一区二区三区| av不卡一区二区三区| 欧美日韩成人一区二区| 久久综合狠狠综合久久激情| 国产精品久久久久9999吃药| 日本sm残虐另类| 风间由美一区二区三区在线观看| 欧美偷拍一区二区| 日韩美女在线视频| 亚洲色图在线视频| 国产中文字幕一区| 91小视频免费观看| 精品国产91亚洲一区二区三区婷婷| 日韩毛片高清在线播放| 性欧美大战久久久久久久久| 大尺度一区二区| 在线播放中文一区| 国产精品毛片大码女人| 日本不卡中文字幕| 91蜜桃网址入口| 久久午夜电影网| 国产精品少妇自拍| 日韩国产欧美在线视频| 91麻豆福利精品推荐| 精品理论电影在线观看| 大陆成人av片| 欧美v国产在线一区二区三区| 亚洲精品日韩一| 99精品桃花视频在线观看| 久久精品亚洲精品国产欧美kt∨| 午夜精品福利一区二区蜜股av| 99精品视频在线观看| 中文字幕欧美日韩一区| 婷婷综合五月天| 色综合久久六月婷婷中文字幕| 国产三级精品在线| 亚洲一二三区在线观看| 国产精品一区二区不卡| 欧美一区二区三区白人| 中文字幕视频一区| 亚洲电影一级片| 91色在线porny| 欧美激情一区二区在线| 久久99精品久久久久| 91精品婷婷国产综合久久竹菊| 国产精品久久久久精k8| 国产成人免费高清| xnxx国产精品| 狠狠色丁香婷婷综合久久片| 日韩一区二区在线免费观看| 日韩国产在线观看| 欧美在线观看一区二区| 亚洲精品伦理在线| 在线看日本不卡| 亚洲国产精品一区二区久久| 欧美色图激情小说| 污片在线观看一区二区| 欧美日本一道本在线视频| 一区二区三区 在线观看视频| 91丨九色porny丨蝌蚪| 亚洲精品乱码久久久久| 色综合久久综合网欧美综合网| 一区二区在线观看视频| 99视频一区二区三区| 国产精品成人免费| 福利一区福利二区| 综合久久久久综合| 99久久精品一区| 一区二区三区欧美亚洲| 日本高清不卡aⅴ免费网站| 国产精品日产欧美久久久久| 99精品一区二区| 日韩av高清在线观看| 精品捆绑美女sm三区| 国产精品亚洲第一区在线暖暖韩国| 国产精品色哟哟| 日韩精品一区二区三区中文不卡 | 亚洲色图清纯唯美| 欧美日韩电影在线播放| 国产美女一区二区三区| 伊人一区二区三区| 久久综合九色欧美综合狠狠| 色综合久久久久综合99| 九色综合狠狠综合久久| 中文字幕一区二区三区色视频| 欧美日韩mp4| 成人激情免费视频| 免费观看日韩av| 亚洲精品水蜜桃| 亚洲精品一区二区三区蜜桃下载 | 国内精品嫩模私拍在线| 日韩毛片在线免费观看| 精品理论电影在线| 在线亚洲免费视频| 加勒比av一区二区| 亚洲国产欧美日韩另类综合| 欧美精品一区二区三区蜜桃| 在线视频观看一区| 国产综合色视频| 亚洲国产视频a| 国产精品三级av| 26uuu精品一区二区| 欧美美女一区二区三区| 91在线视频18| 国产麻豆精品一区二区| 日日夜夜精品免费视频| 午夜久久久久久久久| 中文字幕一区二区三区不卡| 日韩精品一区二区三区视频在线观看 | 欧美性videosxxxxx| 不卡一区中文字幕| 国内精品在线播放| 免费成人在线影院| 日韩av成人高清| 亚洲男人的天堂一区二区| 国产拍揄自揄精品视频麻豆| 欧美大尺度电影在线| 91精品国产色综合久久久蜜香臀|