我目前正在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。
答案 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)
您应该使用SelectedValuePath
从Id
中提取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值。)