将数据从选定项目传递到WinRT中的viewmodel

时间:2013-02-28 09:21:08

标签: c# xaml mvvm-light winrt-xaml

我目前正在WinRT中编写一个应用程序,我需要将listview中所选项目的id传递回我的viewmodel。我的listview有一个Observable集合作为itemsource,因此listview中的每个项目都有不同的id。

我的Xaml代码看起来与此类似

    <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>

我正在使用WinRTBehaviors来模仿EventToCommand行为,但我不知道我应该如何从listview中的项目获取某个参数回到我的viewmodel。对于Mvvm,我正在使用MvvmLight。

4 个答案:

答案 0 :(得分:3)

只需在视图模型中创建一个属性,然后将其绑定到列表视图中的SelectedItem,如下所示:

SelectedItem={Binding MyProperty, Mode=TwoWay}

这就是全部。每当用户更改值时,您的属性都将更新。

答案 1 :(得分:1)

将所选项目绑定到ViewModel中的属性

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

答案 2 :(得分:1)

您应该使用SelectedValuePathId中提取SelectedItem

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

答案 3 :(得分:0)

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

(你必须给你的ListBox一个x:Name值。)