使用MVVM开发模型的时候,分离View层和ViewModel层的同时,也经常要用到用户控件来进一步分离View。
但相应的产生一个问题,用户控件中如何触发主页面中的事件?
这里就要用到事件委托。
例如经常会遇到的:
用户控件为数据绑定容器,其中的数据滚动到底部时(具体判断滚动底部代码省略),动态追加新的数据。
实现非常简单,例子如下:
用户控件的cs:
public delegate void ClickHander();
public ClickHander MyClickHandler = null;
private void ListBox_MouseMove_1(object sender, System.Windows.Input.MouseEventArgs e)
{
MyClickHandler();
}
主页面的xaml:
<Grid HorizontalAlignment="Left" Height="800" Width="480" VerticalAlignment="Top" Margin="0,0,0,0">
//省略
<views:NewsListView Name="newsListView" Margin="0,70,0,0"/>
</Grid>
主页面的cs:
public newsList()
{
//构造方法,处理略
newsListView.MyClickHandler = new NewsListView.ClickHander(this.Test);
}
public void Test(){
//更新数据绑定
}
这样就实现了,当用户控件内滚动轴滚动的时候,立即通知调用主页面的Test()方法。