1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      WP8開發(fā)日志(2):MVC設(shè)計(jì)模式入門-創(chuàng)新互聯(lián)

      由于最近在等待新工作的入職,閑來無事還是完善一下我的WP8開發(fā)的博客吧。經(jīng)過許久回頭看一下我那半成品的WP應(yīng)用,內(nèi)牛滿面,之前Google了N久的東西,居然也不記得了,真是不得不認(rèn)老啊。

      在孟連等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營銷推廣,成都外貿(mào)網(wǎng)站建設(shè),孟連網(wǎng)站建設(shè)費(fèi)用合理。

      這段時(shí)間接觸了一下B/S的東西,覺得那東西真不是人用的,一旦工程量上去,后續(xù)開發(fā)很大一部分時(shí)間都是在Debug中渡過,很是糾結(jié)。現(xiàn)在業(yè)內(nèi)普遍的對移動(dòng)開發(fā)的看法是——web應(yīng)用是種趨勢,可是個(gè)人覺得除非現(xiàn)階段的移動(dòng)網(wǎng)絡(luò)環(huán)境有質(zhì)的改變,否則用戶體驗(yàn)會(huì)很有問題。然后簡單的玩了一下node.js,覺得后臺(tái)其實(shí)也可以不用那么復(fù)雜,想想,還是老老實(shí)實(shí)的寫回自己的客戶端應(yīng)用好了。

      廢話就不多說了,先簡單的介紹一下本篇的目的吧。MVC這個(gè)東西,現(xiàn)下看起來很流行,Model-View-Control,其實(shí)我個(gè)人并不清楚其概念所謂,其實(shí)說白了就是當(dāng)年的“所見即所得”,一個(gè)意思。之前接觸了一下WPF,就是給這個(gè)概念給搞死,但不管怎么樣,xaml可能是MS的開發(fā)趨勢,MCV又是其中一個(gè)極重要的概念,不入門不行。

      MVC的更多的概念性解析請諸位百度或google吧,它的核心是數(shù)據(jù),MVC是一種展現(xiàn)數(shù)據(jù)呈現(xiàn)方式的一種開發(fā)手段,雖然比純代碼性的呈現(xiàn)方式多了一些額外的工作,可是,必須要記住,現(xiàn)在做多一些是為了將來少做一些,其優(yōu)勢還是相當(dāng)可觀的。

      (1)構(gòu)造數(shù)據(jù)類DataItem

      WinForm的項(xiàng)目里,我們想在程序設(shè)計(jì)的階段預(yù)覽ListBox是怎么顯示數(shù)據(jù),那幾乎是不可能的,除非我將程序跑起來,在人類審美觀崛起的現(xiàn)在,代碼與界面分離設(shè)計(jì)可以有效的通過分工實(shí)現(xiàn)人力資源的大化的利用,而這也是MVC的主要任務(wù)。

      寫WinForm時(shí),我會(huì)這么設(shè)計(jì)一個(gè)簡單的數(shù)據(jù)結(jié)構(gòu)體:

      struct TestDataItem
      {
          int Index;
          string Name;
          boo Flag;
      }

      可使用MVC的方式,編譯器沒辦法識(shí)別這樣的定義,所以必須將這簡單的結(jié)構(gòu)體擴(kuò)展成一個(gè)特定的類:

      //TestDataItem.cs

      using System;
      using System.Collections.Generic;
      using System.ComponentModel;
      using System.Linq;
      using System.Text;
      using System.Threading.Tasks;
      namespace MvcTest
      {
          /// 
          /// 數(shù)據(jù)集的Item類,繼承INotifyPropertyChanged,INotifyPropertyChanging接口
          /// 
          public partial class TestDataItem : INotifyPropertyChanged, INotifyPropertyChanging
          {
              /// 
              /// 屬性更改的事件參數(shù)
              /// 
              private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
              /// 
              /// 數(shù)據(jù)屬性變化的事件回調(diào)
              /// 
              public event PropertyChangingEventHandler PropertyChanging;
              public event PropertyChangedEventHandler PropertyChanged;
              /// 
              /// Item的成員屬性
              /// 
              private int _index;
              private string _name;
              private bool _flag;
              /// 屬性更改的響應(yīng)函數(shù)
              #region
              partial void OnIndexChanging(int value);
              partial void OnIndexChanged();
              partial void OnNameChanging(string value);
              partial void OnNameChanged();
              partial void OnFlagChanging(bool value);
              partial void OnFlagChanged();
              #endregion
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
              /// 類接口的實(shí)現(xiàn)
              #region
              /// 
              /// INotifyPropertyChanging接口的實(shí)現(xiàn)函數(shù)
              /// 
              protected virtual void SendPropertyChanging()
              {
                  if ((this.PropertyChanging != null))
                  {
                      this.PropertyChanging(this, emptyChangingEventArgs);
                  }
              }
              /// 
              /// INotifyPropertyChanged接口的實(shí)現(xiàn)
              /// 
              /// 
              protected virtual void SendPropertyChanged(String propertyName)
              {
                  if ((this.PropertyChanged != null))
                  {
                      this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
                  }
              }
              #endregion
              /// 數(shù)據(jù)的公共屬性
              #region
              public int Index
              {
                  get
                  {
                      return this._index;
                  }
                  set
                  {
                      if(this._index != value)
                      {
                          this.OnIndexChanging(value);
                          this.SendPropertyChanging();
                          this._index = value;
                          this.SendPropertyChanged("Index");
                          this.OnIndexChanged();
                      }
                  }
              }
              public string Name
              {
                  get
                  {
                      return this._name;
                  }
                  set
                  {
                      if(this._name != value)
                      {
                          this.OnNameChanging(value);
                          this.SendPropertyChanging();
                          this._name = value;
                          this.SendPropertyChanged("Name");
                          this.OnNameChanged();
                      }
                  }
              }
              public bool Flag
              {
                  get
                  {
                      return this._flag;
                  }
                  set
                  {
                      if (this._flag != value)
                      {
                          this.OnFlagChanging(value);
                          this.SendPropertyChanging();
                          this._flag = value;
                          this.SendPropertyChanged("Flag");
                          this.OnFlagChanged();
                      }
                  }
              }
              #endregion
          }
      }

      此類的核心是INotifyPropertyChanged,INotifyPropertyChanging這兩個(gè)接口(不懂請百度唄,我也懂不了多少)。因?yàn)閿?shù)據(jù)的窗口(像Grid或LongListSelector)要感知每一條TestDataItem的屬性變化,然后這個(gè)類里面就存在各種的回調(diào)或事件啦。

      (2)構(gòu)造數(shù)據(jù)集TestDataItemCollection

      這步理解就簡單一點(diǎn)了,數(shù)據(jù)容器呈現(xiàn)的是整體的數(shù)據(jù)集合,這個(gè)集合也需要一個(gè)特殊的類,否則編譯器不知道怎么去解析(我只能這么理解),有玩過數(shù)據(jù)綁定的童鞋應(yīng)該能弄懂這點(diǎn)。

      當(dāng)然,TestDataItem的集合類也需要實(shí)現(xiàn)一個(gè)特殊的接口INotifyPropertyChanged——沒錯(cuò),跟上面TestDataItem實(shí)現(xiàn)的接口一樣,可以這么理解,這個(gè)接口是MVC的核心所在。

      //TestDataItemCollection.cs

      using System;
      using System.Collections.Generic;
      using System.Collections.ObjectModel;
      using System.ComponentModel;
      using System.Linq;
      using System.Text;
      using System.Threading.Tasks;
      namespace MvcTest
      {
          /// 
          /// 數(shù)據(jù)集的類
          /// 
          public class TestDataCollection : INotifyPropertyChanged
          {
              /// 
              /// 數(shù)據(jù)集合
              /// 
              public ObservableCollection TestDataItems { get; private set; }
              /// 
              /// 屬性更改事件回調(diào)
              /// 
              public event PropertyChangedEventHandler PropertyChanged;
              /// 
              /// 構(gòu)造函數(shù)
              /// 
              public TestDataCollection()
              {
                  this.TestDataItems = new ObservableCollection();
              }
              /// 
              /// INotifyPropertyChanged接口的實(shí)現(xiàn)
              /// 
              private void NotifyPropertyChanged(String propertyName)
              {
                  PropertyChangedEventHandler handler = PropertyChanged;
                  if (null != handler)
                  {
                      handler(this, new PropertyChangedEventArgs(propertyName));
                  }
              }
          }
      }

      (3)構(gòu)造數(shù)據(jù)集示例ViewModel

      這一步設(shè)計(jì)要呈現(xiàn)的數(shù)據(jù)例子,其用到的xmal的文件,可是在Visual Studio新建項(xiàng)的時(shí)候,并沒有這一選項(xiàng),可是我們會(huì)發(fā)現(xiàn)WP的頁面文件格式就xaml的,所以不妨新建一個(gè)頁面,將其重命名為TestDataViewModel.xaml,然后,刪掉頁面正面的cs等文件,將下面這段xaml代碼粘上去——當(dāng)然,你直接手敲上去也是沒有問題的。

      //TestDataViewModel.xaml

      
      
          
          
          
              
              
              
              
              
              
          
      

      注意看xaml的注釋內(nèi)容,但看起來不難,難的一步是如何呈現(xiàn)上面的數(shù)據(jù)集于PhonePage上。

      (4)呈現(xiàn)ViewModel數(shù)據(jù)集

      首先,我們要選一個(gè)數(shù)據(jù)容器,個(gè)人比較喜歡LongListSelector,但似乎沒有其分的選擇,將上面的數(shù)據(jù)集例子綁定上去;然后,設(shè)計(jì)一下單條數(shù)據(jù)呈現(xiàn)的樣式,要用到DataItemTemplate,這也許我將來會(huì)詳講。就這兩條,直接上代碼:

      //MainPage.xaml

      
                                                                                                                                                                  
          
          
              
                  
                      
                      
                      
                      
                  
              
          
          
              
                  
                  
              
              
                  
                  
              
              
                  
                  
                      
                  
              
          
      

      注意以上代碼的兩行注釋跟第10行的內(nèi)容,這是其關(guān)鍵所在,新建一個(gè)默認(rèn)的WP工程,就多了總共三處地方,于是,你就能看到以下的效果啦:

      WP8開發(fā)日志(2):MVC設(shè)計(jì)模式入門

      于是,通過MVC的設(shè)計(jì)手段,我們就能看到在WP設(shè)計(jì)頁面上看到數(shù)據(jù)集合是如何呈現(xiàn)的啦。至于實(shí)際運(yùn)行如何加載數(shù)據(jù)集就不須要多說吧?只要給LongListSelector的ItemSource屬性賦值就好了,一句話的功夫。

      結(jié)語:

      以上的是一個(gè)簡單的MVC模式設(shè)計(jì)的例子,其實(shí)這工作一個(gè)人做看不出什么優(yōu)勢,可是,我們從中看出,這樣的設(shè)計(jì)手法,可以讓界面邏輯跟功能邏輯分開設(shè)計(jì)提高效率,還有,如果程序以后要改進(jìn),從預(yù)覽窗口我們也更容易知道自己需要更改哪些東西,總之,優(yōu)勢不少就是啦。

      自己還有一個(gè)問題,如何在同一個(gè)頁面呈現(xiàn)兩個(gè)數(shù)據(jù)集呢?嗯,這是個(gè)問題。對了,附上工程例子。

      附件:http://down.51cto.com/data/2364279

      另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


      文章題目:WP8開發(fā)日志(2):MVC設(shè)計(jì)模式入門-創(chuàng)新互聯(lián)
      網(wǎng)址分享:http://www.ef60e0e.cn/article/jossj.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        四会市| 循化| 安新县| 黎平县| 龙井市| 昆山市| 萍乡市| 鄱阳县| 翼城县| 景泰县| 裕民县| 雷州市| 和平区| 周宁县| 噶尔县| 安图县| 常山县| 射洪县| 沾益县| 乌兰察布市| 遂宁市| 崇州市| 独山县| 略阳县| 陇西县| 东光县| 冀州市| 榕江县| 德安县| 同江市| 嘉峪关市| 衡阳县| 女性| 嘉黎县| 连江县| 左权县| 寿光市| 澎湖县| 启东市| 柯坪县| 中超|