第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在 MVVM 中使用相同的 ViewModel 擁有多個(gè)視圖?

如何在 MVVM 中使用相同的 ViewModel 擁有多個(gè)視圖?

C#
肥皂起泡泡 2021-10-31 19:15:53
我是 WPF 和 MVVM 的新手,并且在嘗試DataContext在兩個(gè)單獨(dú)的視圖中將其設(shè)置為我的 ViewModel 的同一實(shí)例時(shí)遇到了一個(gè)問題。這是因?yàn)椋?lt;Window.DataContext>     <local:ViewModel/>     </Window.DataContext>將為每個(gè)視圖創(chuàng)建一個(gè)新的視圖模型實(shí)例。為了解決這個(gè)問題,我決定創(chuàng)建一個(gè)類來存儲(chǔ)我使用的每個(gè) ViewModel 的靜態(tài)實(shí)例。然后在cs每個(gè)視圖的文件中,我DataContext將從這個(gè)靜態(tài)類設(shè)置為適當(dāng)?shù)?ViewModel。這行得通,但對(duì)于可能同時(shí)需要多個(gè) ViewModel 實(shí)例的大型程序來說,這似乎不是最好的主意。有什么更好的方法可以解決這個(gè)問題 - 是否有使用同一個(gè) ViewModel 實(shí)例擁有多個(gè)視圖的合理方法?或者這種方法是不好的做法 - 我應(yīng)該為每個(gè) ViewModel 設(shè)計(jì)一個(gè)具有一個(gè)視圖的程序嗎?
查看完整描述

3 回答

?
喵喔喔

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個(gè)贊

您可以在 App.xaml 中實(shí)例化該視圖模型,以便整個(gè)應(yīng)用程序都可以訪問它。


<Application.Resources>

    <local:ViewModel x:Key="sharedViewModel" />

</Application.Resources>

然后在您想要使用該數(shù)據(jù)上下文時(shí)的視圖中,您執(zhí)行以下操作...


DataContext="{StaticResource sharedViewModel}"


查看完整回答
反對(duì) 回復(fù) 2021-10-31
?
寶慕林4294392

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊

我有同樣的問題,但找不到好的答案。經(jīng)過一段時(shí)間的思考,我得出的結(jié)論是,在大多數(shù)情況下,最好在視圖模型和視圖之間創(chuàng)建一對(duì)一的映射。因此,在這種情況下,我將創(chuàng)建兩個(gè)獨(dú)立的視圖模型,它們繼承自基本視圖模型。這樣你就可以在基本視圖模型中放置任何常見的東西,并添加任何可能與更具體的視圖模型不同的字段或方法。如果視圖模型真的是等效的,那么您可能首先要問自己為什么有兩個(gè)單獨(dú)的視圖。您可以考慮將它們合并為一個(gè)視圖。有兩個(gè)單獨(dú)的視圖可能是您想要的,但這只是需要考慮的事情。


查看完整回答
反對(duì) 回復(fù) 2021-10-31
?
九州編程

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊

實(shí)現(xiàn) ViewModelLocator 既簡單又容易,也是推薦的方法之一。


Idea 已經(jīng)在 ViewModelLocator 類中定義了所有的 ViewModel,并在需要的地方訪問 ViewModel。在不同的視圖中使用相同的 ViewModel 在這里不會(huì)有問題。


    public class ViewModelLocator

{

         private MainWindowViewModel mainWindowViewModel;

  public MainWindowViewModel MainWindowViewModel

    {

        get

        {

            if (mainWindowViewModel == null)

                mainWindowViewModel = new MainWindowViewModel();


            return mainWindowViewModel;

        }

    }

    private DataFactoryViewModel dataFactoryViewModel;

 public DataFactoryViewModel DataFactoryViewModel

    {

        get

        {

            if (dataFactoryViewModel == null)

                dataFactoryViewModel = new DataFactoryViewModel();


            return dataFactoryViewModel;

        }

    }

}

應(yīng)用程序.xaml


    xmlns:core="clr-namespace:MyViewModelLocatorNamespace"


<Application.Resources>

    <core:ViewModelLocator x:Key="ViewModelLocator" />

</Application.Resources>

用法


<Window ...

  DataContext="{Binding Path=MainWindowViewModel, Source={StaticResource ViewModelLocator}}">

參考:所以問題 代碼從那里復(fù)制..因?yàn)槲覠o法從我的項(xiàng)目中撕下代碼..


查看完整回答
反對(duì) 回復(fù) 2021-10-31
  • 3 回答
  • 0 關(guān)注
  • 417 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)