[英]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();
}
}
您必須已將MainPage
的DataContext
設置為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.