我正在将一个Android应用程序移植到wp7,我正在尝试以.net的方式做事,我开始把数据绑定包裹起来,但是当涉及到一些事情时,我迷失了方向。
我的课程包括以下内容:
目前我正在将PickLeafCell控件动态添加到PickLeafListView.Items,这种类型绕过数据绑定并且可能导致我看到的一些错误(例如在滚动时更新它导致滚动窗口变得狂暴)。
问题:如果我更改它以便PickLeafModel可以用作DataSource,如何使用数据绑定将IPickLeafListener和PickLeaf引用传递给PickLeafCell?
谢谢!
答案 0 :(得分:1)
很难理解你的架构,但我尝试了。
首先,将您的数据绑定到ListBox
listBox.ItemsSource = PickLeafModel;
您的ListBox
应如下:
<ListBox x:Name="listBox" ...>
<ListBox.ItemTemplate>
<DataTemplate>
<my:PickLeafCell DataContext={Binding} TapEvent="Tap" .../>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这里发生了两件大事:PickLeafCell
DataContext
绑定到每个列表项的数据。并且您订阅了PickLeafCell
自定义活动。
当PickLeafCell
控件中发生某些事件时,它会引发您的主页订阅的自定义事件
public class PickLeafCell...
{
public delegate void TapEventEventHandler(object sender, EventArgs e);
public event TapEventEventHandler TapEvent;
protected virtual void OnTap(EventArgs e)
{
if (TapEvent != null)
TapEvent(this, e);
}
这是您拥有事件处理程序的C#主页代码隐藏:
private Tap(object sender, EventArgs e)
{
var item = (sender as FrameworkElement).DataContext as PickLeaf;
}
在PickLeafCell
控件中,DataContext
已设置为PickLeaf
,因此您可以轻松绑定到字段
<TextBlock Text={Binding SomeFieldOfPickLeaf} />