MVVM模式--游戲地圖編輯器開發(fā)隨筆(2)

今天解決的是關于Model與數(shù)據界面綁定的問題抡谐。
在編寫一些程序的時候難免遇到需要動態(tài)綁定一些數(shù)據進一個ListView或者GridView,而這些東西在MVVM中屬于View的范疇——View必定是與ViewModel通信來獲得Model的扳剿,所以在xaml文件中綁定的資源必定存在于ViewModel中,而ViewModel與View綁定全靠ViewModelLocator,名字就展示了他的功能,并且ViewModelLocator是個單獨的文件问麸,示例:

using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Ioc;
using Microsoft.Practices.ServiceLocation;

namespace App.ViewModel
{
    /// <summary>
    /// This class contains static references to all the view models in the
    /// application and provides an entry point for the bindings.
    /// </summary>
    public class ViewModelLocator
    {
        /// <summary>
        /// Initializes a new instance of the ViewModelLocator class.
        /// </summary>
        public ViewModelLocator()
        {
            ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

            SimpleIoc.Default.Register<AppViewModel>();
        }

        public AppViewModel App
        {
            get
            {
                return ServiceLocator.Current.GetInstance<AppViewModel>();
            }
        }


        public static void Cleanup()
        {
            // TODO Clear the ViewModels
        }
    }
}

在xaml文件中與相應的控件綁定DataContext來達到定位的目的,示例:

<Window x:Class="App.Window1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:MapEditorControl"
             xmlns:vm="clr-namespace:MapEditorControl.ViewModel"
             mc:Ignorable="d" 
             d:DesignHeight="609" d:DesignWidth="263">

    <Window.Resources>
        <vm:ViewModelLocator x:Key="Locator"/>
    </Window.Resources>

    <TabControl DataContext="{Binding Source={StaticResource Locator}, Path=App}">
        <!-- TabItem...-->
    </TabControl>
</Window>

這樣就解決了View與ViewModel綁定的文件钞翔,現(xiàn)在View可以綁定任何ViewModel暴露出來的DP严卖,十分方便。
然而我們在實際運用之中經常要把一個動態(tài)變化的集合綁定到ListView或者GridView等等列表性質的東西上布轿,這個時候ViewModel里的單個依賴屬性就顯得無法滿足我們的需求哮笆,這個時候我們就需要C#的ObservableCollection來將需要綁定的對象打包,其中

public ObservableCollection<T> Example;

這里需要注意的是ObservableCollection只接受類對象汰扭,所以需要把要用的數(shù)據包裝成一個類稠肘,再以這個類新建一個ObservableCollection的示例,這樣便可以綁定到View的ItemsSource上萝毛,其中以ListView為例:

<TabControl TabStripPlacement="Top"
                DataContext="{Binding Source={StaticResource Locator}, Path=App}">
        <TabItem Header="Test" Width="53">
            <ListView ItemsSource="{Binding DataSection}">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <RadioButton Content="{Binding Data}"/>
                    </DataTemplate>
                </ListView.ItemTemplate>
                <!--DynamicResource -->
            </ListView>
        </TabItem>
</TabControl>

DataSection便是包裝好的類對象项阴,Data是類中的數(shù)據,這里需要注意的是ItemTemplate與DataTemplate的使用笆包,詳細用法可以參考《深入淺出WPF》的模板一章环揽。
這樣View就與ViewModel的數(shù)據實現(xiàn)了綁定。ViewModel再與Model綁定就可以完成這個數(shù)據顯示的問題庵佣。

歡迎指正薯演。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市秧了,隨后出現(xiàn)的幾起案子跨扮,更是在濱河造成了極大的恐慌,老刑警劉巖验毡,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衡创,死亡現(xiàn)場離奇詭異,居然都是意外死亡晶通,警方通過查閱死者的電腦和手機璃氢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狮辽,“玉大人一也,你說我怎么就攤上這事巢寡。” “怎么了椰苟?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵抑月,是天一觀的道長。 經常有香客問我舆蝴,道長谦絮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任洁仗,我火速辦了婚禮层皱,結果婚禮上,老公的妹妹穿的比我還像新娘赠潦。我一直安慰自己叫胖,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布她奥。 她就那樣靜靜地躺著瓮增,像睡著了一般。 火紅的嫁衣襯著肌膚如雪方淤。 梳的紋絲不亂的頭發(fā)上钉赁,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天蹄殃,我揣著相機與錄音携茂,去河邊找鬼。 笑死诅岩,一個胖子當著我的面吹牛讳苦,可吹牛的內容都是我干的。 我是一名探鬼主播吩谦,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鸳谜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了式廷?” 一聲冷哼從身側響起咐扭,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎滑废,沒想到半個月后蝗肪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡蠕趁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年薛闪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俺陋。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡豁延,死狀恐怖昙篙,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情诱咏,我是刑警寧澤苔可,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站胰苏,受9級特大地震影響硕蛹,放射性物質發(fā)生泄漏。R本人自食惡果不足惜硕并,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一法焰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧倔毙,春花似錦埃仪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至么库,卻和暖如春傻丝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诉儒。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工葡缰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人忱反。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓泛释,卻偏偏與公主長得像,于是被迫代替她去往敵國和親温算。 傳聞我的和親對象是個殘疾皇子怜校,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,162評論 25 707
  • 這個文章打算長久的寫下去,一方面是記錄自己學習到的知識注竿,以便遺忘茄茁,另一方面是希望在撰寫文章的過程中提升自己的文字能...
    wakinpang閱讀 1,155評論 0 1
  • 1、概述 Databinding 是一種框架巩割,MVVM是一種模式裙顽,兩者的概念是不一樣的。我的理解DataBindi...
    Kelin閱讀 76,804評論 68 521
  • 二問某某人 無親豈有子孫延喂分?厚祭父靈亦枉然锦庸。老母臥床從不問,可知身教重言傳蒲祈? (新韻甘萧,2017-04-05)
    西江古月閱讀 226評論 0 1
  • 自愈開始扬卷,較勁的脖子嘎吱嘎吱的響響響牙言。很累,不停怪得,不是喜歡較勁嗎咱枉,那咱就玩到底吧!能量守恒定律徒恋,你強它就弱~“...
    韓梅123閱讀 403評論 0 3