ListView.SelectedItem 作为 CommandParameter WindowsRT 传递给 ViewModel XAML
ListView.SelectedItem passing to ViewModel as CommandParameter WindowsRT XAML
我有一个定义 RelayCommand 的 ViewModel,在视图中我用 ListItemTemplate 定义了 ListView。我需要通过单击列表项来调用具有列表项值的命令。
视图中的ListView
<ListView x:Name="listView1" SelectionMode="Single" ItemsSource="{Binding SimilarArtists}" MinWidth="360">
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior EventName="SelectionChanged">
<Core:InvokeCommandAction Command="{Binding ResolveSearchPageViewModel.SearchCommand, Converter={StaticResource SelectionChangedConverter}, Mode=OneWay, Source={StaticResource Locator}}" InputConverterParameter="{Binding ElementName=listView1}" />
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
<ListView.ItemTemplate>
<DataTemplate>
<Grid MinWidth="360">
<Grid.ColumnDefinitions>
<ColumnDefinition MaxWidth="48"/>
<ColumnDefinition MinWidth="360"/>
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Width="48" Source="../Assets/singer.png"/>
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Margin="10, 10, 0, 10" FontSize="25" Text="{Binding Name}" TextWrapping="Wrap" Grid.Row="0"/>
</Grid>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
SelectionChangedConverter
public class SelectionChangedConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
var listView = parameter as ListView;
return listView.SelectedItem;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
中继命令
GoToSearchPageCommand = new RelayCommand<Artist>((item) =>
{
var it = item;
_pageNavigationService.ToLoadingPage(item.Name);
});
我需要传入 SelectedItem 的 RelayCommand 值并调用命令。谢谢你。最好的问候,德米特里
Ps。我的英文不是很好,对不起。
您是否考虑过将列表视图的 SelectedItem 属性 绑定到视图模型的 属性?
您不需要命令。只要您为其声明绑定,SelectedItem 就会为您映射。
只需在您的视图模型中添加一个 属性 来反映您的 ItemsSource 所基于的类型并在您的 XAML 中绑定到它。
<ListView SelectedItem = "{Binding MySelectedItem}"
我有一个定义 RelayCommand 的 ViewModel,在视图中我用 ListItemTemplate 定义了 ListView。我需要通过单击列表项来调用具有列表项值的命令。
视图中的ListView
<ListView x:Name="listView1" SelectionMode="Single" ItemsSource="{Binding SimilarArtists}" MinWidth="360">
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior EventName="SelectionChanged">
<Core:InvokeCommandAction Command="{Binding ResolveSearchPageViewModel.SearchCommand, Converter={StaticResource SelectionChangedConverter}, Mode=OneWay, Source={StaticResource Locator}}" InputConverterParameter="{Binding ElementName=listView1}" />
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
<ListView.ItemTemplate>
<DataTemplate>
<Grid MinWidth="360">
<Grid.ColumnDefinitions>
<ColumnDefinition MaxWidth="48"/>
<ColumnDefinition MinWidth="360"/>
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Width="48" Source="../Assets/singer.png"/>
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Margin="10, 10, 0, 10" FontSize="25" Text="{Binding Name}" TextWrapping="Wrap" Grid.Row="0"/>
</Grid>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
SelectionChangedConverter
public class SelectionChangedConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
var listView = parameter as ListView;
return listView.SelectedItem;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
中继命令
GoToSearchPageCommand = new RelayCommand<Artist>((item) =>
{
var it = item;
_pageNavigationService.ToLoadingPage(item.Name);
});
我需要传入 SelectedItem 的 RelayCommand 值并调用命令。谢谢你。最好的问候,德米特里
Ps。我的英文不是很好,对不起。
您是否考虑过将列表视图的 SelectedItem 属性 绑定到视图模型的 属性?
您不需要命令。只要您为其声明绑定,SelectedItem 就会为您映射。
只需在您的视图模型中添加一个 属性 来反映您的 ItemsSource 所基于的类型并在您的 XAML 中绑定到它。
<ListView SelectedItem = "{Binding MySelectedItem}"