情况:
我有一个MainViewModel类,其中包含一个名为
的集合
ItemViewModel类的“问题”
我在MainviewModel类中有一个loadData函数,其中
实例化ItemViewModel类,并将实例添加到
问题收集。
我还有一个在LoadData结束时触发的公共事件Event1 功能
怀疑:
我想在MainPage.xaml.cs的构造函数中注册Event1,以便它指向MainPage.xaml.cs中定义的eventhandler。它是怎么做到的?
以下是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();
}
}
答案 0 :(得分:0)
您必须将DataContext
的{{1}}设置为MainPage
,因此请在MainViewModel
InitializeComponent()
<强>更新强>
征求意见:
我们正在连接事件处理程序和event1,我们不应该写 ((MainViewModel)DataContext)。Event1 + = new HandlerName。
不,你不需要。无论如何,你的代码不会工作,必须使用代理名称,即
public MainPage()
{
InitializeComponent();
......
((MainViewModel)DataContext).Event1 += HandlerName;
......
}
前面提到的一个和上面说的一个是等价的。
第二个是语句DataContext = App.ViewModel.MainViewModel; 放置在InitializeComponent()之后;将datacontext设置为 MainViewModel。
是的,你可以在((MainViewModel)DataContext).Event1 += new EventDelegate(HandlerName);
之前或之后放置它,它会起作用。