Landvis
Landvis

Reputation: 280

Passing data from selected item to viewmodel in WinRT

I am currently writing an application in WinRT where i need to pass an id from a selected item in a listview back to my viewmodel. My listview has an Observable collection as an itemsource so there will be a different id for each item in the listview.

my Xaml code look similar to this

    <ListView Grid.Column="0" ItemsSource="{Binding VacationOverviewDisplay}"  >
                <WinRtBehaviors:Interaction.Behaviors>
                    <Win8nl_Behavior:EventToCommandBehavior Event="SelectionChanged"   
                                              Command="DetailsCommand"
                                              CommandParameter="{Binding Path=DontKnow, Mode=TwoWay}"/>
                </WinRtBehaviors:Interaction.Behaviors>
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Vertical" >
                            <StackPanel Orientation="Horizontal">
                                <TextBlock VerticalAlignment="Center" FontWeight="Bold" FontFamily="Segoe UI" Text="{Binding VacationStart, Converter={StaticResource StringFormatConverter}, ConverterParameter='{}{0:dd MMM yyyy}' }" Margin="20,0,0,0"></TextBlock>
                                <TextBlock VerticalAlignment="Center" FontWeight="Bold" FontFamily="Segoe UI" Text="{Binding VacationEnd, Converter={StaticResource StringFormatConverter}, ConverterParameter='{}{0:dd MMM yyyy}' }" Margin="20,0,0,0"></TextBlock>
                                <TextBlock x:Name="id" VerticalAlignment="Center" FontWeight="Bold" FontFamily="Segoe UI" Text="{Binding VacationRequestId}" Margin="20,0,0,0"></TextBlock>
                            </StackPanel>
                            <TextBlock Text="{Binding StatusView}" Margin="50,0,0,0"></TextBlock>
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="Title: " Margin="50,0,0,0"></TextBlock>
                                <TextBlock FontStyle="Italic" Text="{Binding VacationCommentUser}" Margin="5,0,0,0"></TextBlock>
                            </StackPanel>
                        </StackPanel>
                    </DataTemplate>
                </ListView.ItemTemplate>

            </ListView>

I am using the WinRTBehaviors to mimic the EventToCommand behavior but i have no idea how i should get a certain parameter from an item in my listview back to my viewmodel. for the Mvvm i am using MvvmLight.

Upvotes: 0

Views: 3041

Answers (4)

Anatolii Gabuza
Anatolii Gabuza

Reputation: 6260

You should use SelectedValuePath for extracting Id from SelectedItem:

<ListView Grid.Column="0" ItemsSource="{Binding VacationOverviewDisplay}"
                          SlectedValuePath="Id" 
                          SelectedValue="{Binding SelectedVacationId, Mode=TwoWay}"> 

Upvotes: 1

TheJoeIaut
TheJoeIaut

Reputation: 1532

Bind Selected Item To a Property in your ViewModel

<ListView Grid.Column="0" ItemsSource="{Binding VacationOverviewDisplay}" SelectedItem="{Binding SelectedVacation, Mode=TwoWay}"> 

Upvotes: 1

Krzysztof Cygan
Krzysztof Cygan

Reputation: 310

Just create a property in a view model then bind it to SelectedItem in your list view like this:

SelectedItem={Binding MyProperty, Mode=TwoWay}

That's all. Whenever a user changed a value, your property will be updated.

Upvotes: 3

Alyce
Alyce

Reputation: 896

CommandParameter="{Binding ElementName=MyListBox, Path=SelectedItem}"

(You'll have to give your ListBox an x:Name value.)

Upvotes: 0

Related Questions