最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

WPF框架Prism中ViewModelLocator用法介紹

 更新時(shí)間:2022年02月11日 09:59:42   作者:痕跡g  
這篇文章介紹了WPF框架Prism中ViewModelLocator的用法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

建立連接

在WPF當(dāng)中,需要為View與ViewModel建立連接, 我們需要找到View的DataContext, 如下所示:

建立連接的方式

如果你使用了解WPF當(dāng)中如何綁定DataContext, 你應(yīng)該能想到會(huì)有下面這些方式進(jìn)行:

  • XAML設(shè)置
  • Code設(shè)置 (構(gòu)造函數(shù)注入 或 ViewModelLocator)

XAML的方式:

 <UserControl.DataContext>
        <.../>
 </UserControl.DataContext>

代碼的方式:

    public partial class ViewA : UserControl
    {
        public ViewA()
        {
            InitializeComponent();
            this.DataContext = null; //設(shè)定
        }
    }

如果你使用過(guò)第三方的MVVM框架, 標(biāo)準(zhǔn)的ViewModelLocator可能如下所示:

嗯...確實(shí),這些方式都可以建立View-ViewModel關(guān)系。

但是,這一切并不是Prism想表達(dá)的內(nèi)容, 甚至不建議你按上面的方式去做, 因?yàn)檫@樣幾乎打破了開(kāi)發(fā)的所有原則。

(我們把View與ViewModel的關(guān)系編碼的方式固定了下來(lái), 通過(guò)靜態(tài)類去維護(hù)ViewModel的關(guān)系...)

Prism ViewModelLocator

在Prism當(dāng)中, 你可以基于命名約定, 便能夠輕松的將View/ViewModel建議關(guān)聯(lián)。如下所示:

假設(shè)你已經(jīng)為項(xiàng)目添加Views/ViewModels文件夾。此時(shí), 你的頁(yè)面為ViewA, 則對(duì)應(yīng)的ViewModel名稱為 ViewAViewModel。

下面則是錯(cuò)誤的命名方法:

當(dāng)遵循了命名規(guī)范后, 是不是意味著就能夠進(jìn)行自動(dòng)綁定? 不, 此時(shí)還需要在View當(dāng)中聲明,允許當(dāng)前View自動(dòng)裝配ViewModel:

細(xì)心的你會(huì)發(fā)現(xiàn), 這也就是為什么, 使用VisualStudio Tmeplate Pack創(chuàng)建的空白項(xiàng)目的時(shí)候, 為什么項(xiàng)目會(huì)為你默認(rèn)創(chuàng)建Views/ViewModels文件夾。

當(dāng)然, 任性的我們也可以選擇不遵循這個(gè)約定, 盡管它看起來(lái)似乎也能夠很好的進(jìn)行工作...

更改約定

實(shí)際的開(kāi)發(fā)中, 我們可能有些清空無(wú)法遵循此規(guī)則, 如下所示,我們定義Controls文件夾放View, ViewModels文件夾放ViewModel:

修改方式:

1.使用ViewModelLocationProvider設(shè)置默認(rèn)視圖類型指定的ViewModel。

ViewModelLocationProvider.SetDefaultViewTypeToViewModelTypeResolver((viewType) =>
            {
                var viewName = viewType.FullName;
                var assemblyName = viewType.Assembly.FullName;
                var vmName = $"{viewName.Replace("Controls", "ViewModels")}ViewModel, {assemblyName}";
                return Type.GetType(vmName);
            });

該代碼的最終意思就是,將原有的View命名控件命名改成了符合約定的命名。

2.使用ViewModelLocationProvider指定View與ViewModel的類型。

        public void RegisterTypes(IContainerRegistry containerRegistry)
        {
            ViewModelLocationProvider.Register<ControlA, ControlAViewModel>();

            //ViewModelLocationProvider.Register<ControlA>(() => new ControlAViewModel() { Text = "Hello from Factory" });
        }

到此這篇關(guān)于WPF框架Prism中ViewModelLocator用法的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • ASP.NET?MVC模式中應(yīng)用程序結(jié)構(gòu)詳解

    ASP.NET?MVC模式中應(yīng)用程序結(jié)構(gòu)詳解

    本文詳細(xì)講解了ASP.NET?MVC模式中的應(yīng)用程序結(jié)構(gòu),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • ASP.NET Core MVC中的控制器(Controller)介紹

    ASP.NET Core MVC中的控制器(Controller)介紹

    這篇文章介紹了ASP.NET Core MVC中的控制器(Controller),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • .NET?6全新配置對(duì)象ConfigurationManager介紹

    .NET?6全新配置對(duì)象ConfigurationManager介紹

    這篇文章介紹了.NET?6全新配置對(duì)象ConfigurationManager,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11
  • IE 性能分析工具(asp.net環(huán)境)

    IE 性能分析工具(asp.net環(huán)境)

    這個(gè)工具應(yīng)該很有用,因?yàn)橛?IE 的人實(shí)在是太多了~~萬(wàn)惡的IE6 !
    2010-08-08
  • Asp.net中Request.Url的各個(gè)屬性對(duì)應(yīng)的意義介紹

    Asp.net中Request.Url的各個(gè)屬性對(duì)應(yīng)的意義介紹

    網(wǎng)絡(luò)上關(guān)于Request.Url的說(shuō)明已經(jīng)很多也很豐富了,但是自己還是實(shí)踐了一下,看看最終的結(jié)果與網(wǎng)絡(luò)上的是否一致
    2012-05-05
  • ASP.NET中Application、Cookie、Session、Cache和ViewState

    ASP.NET中Application、Cookie、Session、Cache和ViewState

    本文主要介紹Application、Cookie、Session、Cache和ViewState,并總結(jié)了在什么情況下使用他們,希望對(duì)大家有所幫助。
    2016-04-04
  • ORM框架之Dapper簡(jiǎn)介和性能測(cè)試

    ORM框架之Dapper簡(jiǎn)介和性能測(cè)試

    這篇文章介紹了ORM框架之Dapper簡(jiǎn)介和性能測(cè)試,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • WPF框架Prism中導(dǎo)航Navigation用法介紹

    WPF框架Prism中導(dǎo)航Navigation用法介紹

    這篇文章介紹了WPF框架Prism中導(dǎo)航Navigation的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • ASP.NET?Core?MVC中的模型(Model)

    ASP.NET?Core?MVC中的模型(Model)

    這篇文章介紹了ASP.NET?Core?MVC中的模型(Model),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • ASP.NET?MVC模式簡(jiǎn)介

    ASP.NET?MVC模式簡(jiǎn)介

    這篇文章介紹了ASP.NET?MVC模式,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03

最新評(píng)論

鸡泽县| 渭南市| 三原县| 孟州市| 潜江市| 石棉县| 廉江市| 温州市| 大化| 榆树市| 尚志市| 高邮市| 胶南市| 分宜县| 昂仁县| 邵东县| 临漳县| 神农架林区| 肇源县| 乌鲁木齐市| 兴国县| 高安市| 盐山县| 荣昌县| 肃北| 佳木斯市| 开鲁县| 安西县| 云霄县| 延庆县| 汉阴县| 大城县| 广水市| 庆城县| 三门峡市| 南华县| 定兴县| 乐业县| 昭觉县| 桐柏县| 沙洋县|