亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

WPF、MVVM:創建新視圖并將參數傳遞給它的 ViewModel

WPF、MVVM:創建新視圖并將參數傳遞給它的 ViewModel

C#
守候你守候我 2021-06-02 14:55:44
我沒有在任何地方找到這個。目前我正在制作一個 WPF 應用程序,但遇到了一個問題。我需要一頁,但數據應該不同,具體取決于哪個按鈕調用了頁面。如果不嘗試堅持使用 MVVM,那會很容易。我已經有一個按鈕可以將所需的數據傳遞給頁面 cs 文件,但我不知道如何將該數據傳遞給 ViewModel。詳細視圖頁面.xaml.cs:namespace unnamed{    public partial class DetailedViewPage : BasePage<DetailedViewViewModel>    {            public DetailedViewPage(string position)        {                InitializeComponent();        }    }    //I'm using similar method to create new View    private void CreateNewWindow()    {        var MainWindow = (MainWindow) Application.Current.MainWindow;        var MWViewModel = (WindowViewModel) MainWindow.DataContext;        MWViewModel.CurrentPage = new DetailedViewPage("top");    }}BasePage.cs:public class BasePage<VM> : Page        where VM : BaseViewModel, new()    {        private VM mViewModel;        public VM ViewModel        {            get { return ViewModel; }            set            {                if (mViewModel == value)                    return;                mViewModel = value;                this.DataContext = mViewModel;            }        }        public BasePage()        {            this.Resources = ((MainWindow)Application.Current.MainWindow).Resources;            this.ViewModel = new VM();        }    }詳細視圖視圖模型.cs:namespace unnamed{    public class DetailedViewViewModel : BaseViewModel    {            public string PossitionShown { get; set; }        public DetailedViewViewModel()        {                        }        }}所以我的目標是將位置變量從頁面 cs 文件獲取到 ViewModel 并分配給PossitionShown.
查看完整描述

1 回答

?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

您的視圖 ( DetailedViewPage) 有一個DataContext,即DetailedViewViewModel。


DataContext可以通過默認構造函數(在 XAML 中輸入時)自動創建,也可以在構造函數中創建。基本上,在創建視圖之后,我們可以簡單地為其設置值。


public DetailedViewPage(string position)

{

    InitializeComponent();


    //optional line, if not set in XAML

    this.DataContext = new DetailedViewViewModel();


    var VM = (this.DataContext as DetailedViewModel);

    VM.PossitionShown = position;

}

編輯: 添加代碼以在 ViewModel 構造中傳遞變量。


public DetailedViewPage(string position)

{

    InitializeComponent();

    //Note this line is not "optional" anymore, You must pass the value as a variable.

    this.DataContext = new DetailedViewViewModel(position);

}


public class DetailedViewViewModel : BaseViewModel

{

    public string PossitionShown { get; set; }

    public DetailedViewViewModel(string position)

    {

        PossitionShown = position;

    }

}

附帶說明一下,這并不完全是MVVM approach,因為您已經通過 傳遞了一些參數View,并且View正在考慮存在某種類型的ViewModel.


查看完整回答
反對 回復 2021-06-05
  • 1 回答
  • 0 關注
  • 535 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號