我有一些XAML看起來像Windows Phone 7的應用程序:事件綁定到按鈕一個ItemsControl
<Grid x:Name="ContentGrid" Grid.Row="1">
<ItemsControl x:Name="MyView" ItemTemplate="{StaticResource MyInner}"/>
</Grid>
的項目模板這裏看起來像:
<DataTemplate x:Key="MyInner">
<ItemsControl ItemsSource="{Binding}" ItemTemplate="{StaticResource MyInner_Item}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</DataTemplate>
最後,MyInner_Item模板看起來像:
<DataTemplate x:Key="MyInner_Item">
<Button x:Name="MyButton">
<Button.Template>
<ControlTemplate>
<Border HorizontalAlignment="Center" VerticalAlignment="Center" x:Name="myborder">
<Image Source="{Binding Path=ImageUri}" Width="{Binding Path=Width}" Height="{Binding Path=Height}" Stretch="Fill" />
</Border>
</ControlTemplate>
</Button.Template>
</Button>
</DataTemplate>
所以,這是一個ItemsControl,其中包含一個ItemsControl,它包含按鈕。這基本上創建了一個二維數組按鈕。
我想要做的是添加一個事件處理程序到按鈕的Click事件。
這裏有一個問題:它背後的代碼是用F#編寫的。據我所知,我不能在XAML中指定我的事件處理程序,因爲F#不會以任何好的方式與WPF進行通信。所以我需要在代碼中手動添加我的事件處理程序。
有沒有簡單的方法來做到這一點?
目前,我有一些F#,看起來像:
let myView : ItemsControl = this?MyView
do myView.ItemsSource <- viewModel.BoardData
這裏,BoardData是列表的列表。
我想知道是否有可能循環通過ItemsControl中的控件來添加我的事件處理程序?儘管如此,我遇到了一些麻煩。例如,在以下幾點:
let container = myView.ItemContainerGenerator.ContainerFromItem(myView.Items.[0])
...設置容器爲空。實際上,我從myView.ItemContainerGenerator嘗試的所有方法都返回null。
那麼,我應該如何去附加我的事件處理程序,以便我可以響應被點擊的按鈕?
Thankyou回答 - 不幸的是我已經嘗試了這種方法,事實證明wp7基於Silverlight 3,它不支持命令。所以沒有按鈕的命令屬性。儘管如此,我可能會稍後再提供這個功能,因爲我相信芒果更新可能會增加此功能,但我必須嘗試針對較新的平臺。 –
所以我最終將項目升級到了7.1平臺的目標,在按鈕中添加了一個命令屬性,並且把所有東西都吸引住了。儘管編輯抱怨命令屬性沒有在按鈕上找到,它確實設法編譯和運行。和工作。 –