Windows Phone 7 MVVM模式的學習筆記

來源:互聯網
上載者:User

一、View
View視圖層
就是xaml檔案 主要就是介面的設計 xaml.cs檔案只有預設產生的程式碼,MVVM模式一般不用將頁面的資料初始化,事件處理的代碼寫在xaml.cs上
資料初始化可以通過資料繫結來實現  事件的處理也是通過綁定Command來實現

先添加資源  這裡是放在App.xaml上載入
<!--這裡是將你寫好的ViewModel放到了程式資源裡面去,接下來的綁定將會用到的-->
    <Application.Resources>
        <vm:GlobalViewModelLocator xmlns:vm="clr-namespace:MyProject.ViewModels"
                                   x:Key="Locator" />
    </Application.Resources>
MyProject.ViewModels是命名空間  GlobalViewModelLocator則是你寫好的ViewModel類  資源的key用Locator來表示
當然 你也可以通過在具體的頁面來實現上載入ViewModel作為資源

在xaml頁面上就可以綁定ViewModel了

<phone:PhoneApplicationPage
                           ……
                            DataContext="{Binding MainViewModel, Source={StaticResource Locator}}"
                            ……
  ">
這樣就綁定了 之前定義的ViewModel資源啦

然後呢 你就可以在頁面的控制項上綁定到ViewModel的定義好的資料和Command命令了(有些項目會將Command與ViewModel完完全全分開工作,個人覺得Command放在ViewModel進行初

始化和調用會更加好一些,也就是說所有的綁定無論是資料或者是Command命令都是放在ViewModel)

<TextBlock Grid.Row="1"
   Text="{Binding Item.AverageRating}"
    Margin="0,0,8,0"
   FontSize="24"
   VerticalAlignment="Center" />
這是綁定了ViewModel的資料

<i:Interaction.Triggers>
     <li:TapTrigger>
           <cmd:EventToCommand Command="{Binding TapCommand}" PassEventArgsToCommand="True"/>
     </li:TapTrigger>
</i:Interaction.Triggers>
這是綁定了ViewModel的Command命令  這個是使用了MVVM Light toolkit架構的寫法

二、ViewModel
ViewModel是視圖模型層 這一層是負責了對View視圖層展現以及各種事件的處理 灰常灰常重要
實現ViewModel層的方法很多
可以通過繼承INotifyPropertyChanged 介面實現 繼承ViewModelBase基類來實現  繼承IEnumerable<T>介面來實現 使用第三方架構的基類實現等等
繼承INotifyPropertyChanged 介面實現文法如下
public class PersonViewModel : INotifyPropertyChanged
{
    private string firstNameValue;
    public string FirstName{
        get { return firstNameValue; }
        set
        {
            firstNameValue=value;
            // 通知FirstName屬性的改變
            NotifyPropertyChanged("FirstName");
        }
    }

    // 定義PropertyChanged 事件
    public event PropertyChangedEventHandler PropertyChanged;

    public void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    } 
}
其實ViewModel類的原理都是大同小異的  簡單地說就是它的屬效能夠動態地變化,因為要跟View層互動

Command命令一般都需要定義成獨立的類來實現,然後再ViewModel上執行個體化
Command命令類的實現的方法也幾種方法
比如繼承ICommand 使用第三方組件的Command命令的類
繼承ICommand 的文法如下
    public class MyCommand<T> : ICommand
    {
        Action<T> Excuted;
        Func<bool> canExcute;
        public ShowMessageCommand(Action<T> excuted)
        {
            this.Excuted = excuted;

        }

        public bool CanExecute(object parameter)
        {
            return true;
        }

        public event EventHandler CanExecuteChanged;

        public void Execute(object parameter)
        {
            //你的需要執行的代碼
           
        }
    }
View層要傳遞的參數等等都可以通過資料繫結來擷取然後再在Command命令中處理,最後再通過資料繫結展現在View視圖層上

三、Model
Model層比較簡單就是一個物件導向的實體類

比如
       public class Person
       {
         public int age  { get; set; }
         public string name { get; set; }
       }

    public class Persons
    {
        public List<Person> person;
        public List<Person> getPerson()
        {
            person = new List<Person>()
            {
                new Person{name = "Tom",  age = 21 },
                new Person{name = "Jack", age = 22 },
                new Person{name = "Rose", age = 23 },
            };
            return person;
        }
    }

Model層是主要的作用就是將資訊用物件導向的方法封裝起來,然後給ViewModel層使用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.