[英]Silverlight, DataTemplate, Binding to click event
美好的一天,
我在這里絕望了。 考慮以下用例。
我有一個列表框,其中的項目是自定義模板控件。 它有幾個按鈕,這個自定義控件的代碼后面有事件處理程序。 每當點擊按鈕時,我通過DataContext調用我的自定義控件綁定的對象的方法。 因此,當用戶單擊停止時,我會調用_context.stopDownload(),而對象會執行其余操作。
但是,我有一個按鈕,應該開始播放內容。 我試圖以某種方式在核心級別上聽這個按鈕的點擊事件,而不是在代表列表框項目UI的自定義控件后面的代碼中。
所以,總結一下:
我無法弄清楚#3。 除此之外,我在設置ItemsSource以連接事件處理程序后嘗試做類似的事情,但容器始終為null。
DownloadsListElement.ItemsSource = _downloadsList;
foreach (var item in DownloadsListElement.ItemsSource)
{
var container = DownloadsListElement.ItemContainerGenerator.ContainerFromItem(item) as FrameworkElement;
}
我還嘗試在列表框上按一個網格,並嘗試使用Grid的MouseLeftButtonDown / Up上的VisualTreeHelper單擊按鈕,但是當我單擊按鈕時從不調用這些按鈕。
我想當我在某個全局對象中注冊事件處理程序然后從DataTemplate內的自定義控件中調用它時,只有可能的解決方案是使用某種命令模式。
我沒有想法,希望有人有類似這個問題的東西。
謝謝。
更新
感謝McGamagle和ChrisW,我得到了它的工作。 我在按鈕上的最終代碼如下所示:
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:CallMethodAction TargetObject="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType=local:ListBoxExt}}" MethodName="PlayButton_Click"/>
</i:EventTrigger>
</i:Interaction.Triggers>
感謝大伙們!
我的理解是你想要一個處理程序附加到ListBox項的DataTemplate中的項,其中處理程序屬於父的DataContext。
您可以使用RelativeSource FindAncestor
綁定來執行此操作。 您可能需要考慮使用ICommand
而不是處理程序,但如果確實需要處理程序,則可以使用Blend SDK的CallMethodAction
。
XAML應該看起來像這樣(其中“SomeCommand”是ListBox的數據上下文的ICommand
屬性):
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<Button Command="{Binding RelativeSource={RelativeSource AncestorType=ListBox},
Path=DataContext.SomeCommand}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
或者使用“CallMethodAction”技術(此處“HandleButtonClick”必須是ListBox數據上下文的公共方法):
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<Button>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:CallMethodAction
TargetObject="{Binding RelativeSource={RelativeSource AncestorType=ListBox}, Path=DataContext.SomeCommand}"
MethodName="HandleButtonClick" />
</i:EventTrigger EventName="Click">
</i:Interaction.Triggers>
</Button>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.