簡體   English   中英

如何在MainPage.xaml.cs的構造函數中將事件處理程序注冊到另一個類的事件

[英]How to register a event handler to the event of another class in constructor of MainPage.xaml.cs

情況:

  • 我有一個MainViewModel類,其中包含一個名為
    ItemViewModel類的“問題”

  • 我在MainviewModel類中有一個loadData函數,其中
    實例化ItemViewModel類,並將實例添加到
    問題收集。

  • 我也有一個公共事件Event1,該事件在LoadData函數的末尾觸發。

懷疑:

我想在MainPage.xaml.cs的構造函數中注冊Event1,以便它指向MainPage.xaml.cs中定義的事件處理程序。 怎么做呢?

以下是MainViewModel類的代碼段,為清楚起見已跳過某些聲明

    public event EventDelegate Event1;
    public void LoadData()
    {
    //place RT  data here

        this.Problems.Add(new ItemViewModel() { ID = 0, ProblemName = "Fever"});
        this.Problems.Add(new ItemViewModel(){ID=1,ProblemName="Diarrhea"});
        this.Problems.Add(new ItemViewModel() { ID=2,ProblemName = "sprain" });
        this.Problems.Add(new ItemViewModel() { ID = 3, ProblemName = "bruise" });

        OnEvent1();
    }

   protected virtual void OnEvent1()
   {
       EventDelegate handler = Event1;
       if (handler!=null)
       {
           handler();
       }
   }

您必須已將MainPageDataContext設置為MainViewModel ,因此獲取實例並在InitializeComponent()之后將事件掛接到構造函數中

public MainPage()
{
   InitializeComponent();
   ......
   ((MainViewModel)DataContext).Event1 += HandlerName;
   ......
}

更新

征求意見:

我們正在連接事件處理程序和event1,我們不應該編寫((MainViewModel)DataContext).Event1 + = new HandlerName。

不,您不需要。 無論如何,您的代碼將無法工作,必須使用委托人名稱,即

((MainViewModel)DataContext).Event1 += new EventDelegate(HandlerName);

前面提到的一個和上面提到的一個是等效的。

第二個語句是DataContext = App.ViewModel.MainViewModel; 放在InitializeComponent()之后; 將datacontext設置為MainViewModel。

是的,您可以將其放在InitializeComponent()之前或之后,它將起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM