Трудно понять вашу архитектуру, но я стараюсь.
Прежде всего, свяжите ваши данные с 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} />