RJJatson
RJJatson

Reputation: 99

How to bind multiple eventhandlers on WindowsPhone 8 using XAML?

I'm about to make a control page that has several textblock. each textblock will be "linked" to another page,

here's my xaml part

.........<phone:LongListSelector x:Name="settingSelector" ItemsSource="{Binding}">
                <phone:LongListSelector.ItemTemplate>
                    <DataTemplate>
                        <StackPanel toolkit:TiltEffect.IsTiltEnabled="True" Tap="{Binding TapMethod, Mode=TwoWay}" >
                            <TextBlock Text="{Binding SetTitle}" FontSize="43" />
                            <TextBlock Text="{Binding SetDescription}" FontSize="19" Margin="0 0 0 10" />
                        </StackPanel>
                    </DataTemplate>
                </phone:LongListSelector.ItemTemplate>
            </phone:LongListSelector>..........

when I try this code behind :

  .........public class SettingProperty
    {

        public string SetTitle{get; set;}
        public string SetDescription{get; set;}
        public string TapMethod{get; set;}
        public SettingProperty(string setTitle, string setDescription, string tapMethod)
        {
            SetTitle = setTitle;
            SetDescription = setDescription;
            TapMethod = tapMethod;
        }
    }

    List<SettingProperty> DataSetting()
    {
        List<SettingProperty> settingCollection = new List<SettingProperty>();
        settingCollection.Add(new SettingProperty("Saldo", "cek saldo", "saldo_Tap"));
        return settingCollection;
    }

    private void saldo_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
        NavigationService.Navigate(new Uri("/saldo.xaml", UriKind.Relative));
    }..........

I directly deployed them to my L520, I'm prety sure the culprit is the "Tap" binding on my stackpanel, when I omit it, the code works. Did I miss something, or my whole method is just wrong?

Upvotes: 0

Views: 74

Answers (1)

Miiite
Miiite

Reputation: 1557

our understanding of the "Tap" event is wrong.

You have two options here:

  • Either you clearly specify a METHOD NAME (not a string) as a event handler for the Tap event. For example:

    Tap="MyControl_Tap" In this case you must have a MyControl_Tap method in your control's code behind

  • OR, since you seem to be using the MVVM pattern, you have to create a ICommand, and then include your whole StackPanel in a Button, like this:

    ...<DataTemplate>
    <Button Command="{Binding MyCommandProperty}">
                        <StackPanel toolkit:TiltEffect.IsTiltEnabled="True" >
                            <TextBlock Text="{Binding SetTitle}" FontSize="43" />
                            <TextBlock Text="{Binding SetDescription}" FontSize="19" Margin="0 0 0 10" />
                        </StackPanel>
    </Button>
    

    ...

Upvotes: 1

Related Questions