XAML in Xamarin.Forms 基礎篇 電子書

XAML in Xamarin.Forms 基礎篇 電子書
XAML in Xamarin.Forms 基礎篇 電子書

Xamarin.Forms 快速入門 電子書

Xamarin.Forms 快速入門 電子書
Xamarin.Forms 快速入門 電子書

2017/02/28

Xamarin FAQ 2-26 : 如何從 ViewModel 中呼叫 Code Behind內的方法

問題

這個問題與 Xamarin FAQ 2-25 是相稱的,也就是說,因為我們都在 ViewModel 內寫商業處理邏輯,可是,有些時候,因為特殊需求,想要在 ViewModel 內,可以呼叫 Code Behind 的方法,這樣該怎麼處理呢?

解答

在這裡,我們假設這個頁面名稱為 MainPage,而該頁面的 ViewModel 為 MainPageViewModel
底下為 Code Behind 的程式碼,我們在建構式內,取得了這個頁面的 ViewModel 物件,因此,透過 ViewModel 物件,指定頁面中的 TestDelegate 方法到 ViewModel 內的委派方法 myDelegate 物件內,因此,我們在 ViewModel 內,若呼叫 TestDelegate 這個委派方法,就會直接執行 Code Behind 內的方法了。
    public partial class MainPage : ContentPage
    {
        MainPageViewModel fooMainPageViewModel;
        public MainPage()
        {
            InitializeComponent();

            fooMainPageViewModel = this.BindingContext as MainPageViewModel;
            fooMainPageViewModel.myDelegate = TestDelegate;
        }

        public string TestDelegate(string para)
        {
            return $"Result:{para}";
        }
    }
底下是 ViewModel 的範例程式碼
    public class MainPageViewModel : BindableBase, INavigationAware
    {
        public delegate string TestDelegate(string para);
        public TestDelegate myDelegate;

        public void OnNavigatedFrom(NavigationParameters parameters)
        {
        }

        public void OnNavigatedTo(NavigationParameters parameters)
        {
            if (myDelegate != null)
            {
                var foo = myDelegate("Hello");
                ...
            }
        }
    }
Xamarin-跨平台手機應用程式設計入門-粉絲團

沒有留言:

張貼留言