MvvmCross Windows Phone 8.1将列表选择绑定到命令,编译失败
我发现以下错误: 无法将Windows.UI.Xml.Controls.ListView类型的对象转换为System.Windows.DependencyObject类型 由于以下代码:MvvmCross Windows Phone 8.1将列表选择绑定到命令,编译失败,windows,xaml,windows-runtime,mvvmcross,Windows,Xaml,Windows Runtime,Mvvmcross,我发现以下错误: 无法将Windows.UI.Xml.Controls.ListView类型的对象转换为System.Windows.DependencyObject类型 由于以下代码: <ListView Grid.Row="1" ItemsSource="{Binding Cases}" IsItemClickEnabled="False" SelectionMode="Single"> <ListView.ItemTemplate> <Data
<ListView Grid.Row="1" ItemsSource="{Binding Cases}" IsItemClickEnabled="False" SelectionMode="Single">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Subject}" HorizontalAlignment="Left"></TextBlock>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding ShowCaseCommand, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</ListView>
我通过从C:\ProgramFiles(x86)\Microsoft SDK\Expression\Blend\.NETFramework\v4.5\Libraries\System.Windows.Interactivity.dll
手动添加引用,向项目添加了交互
当然,删除
块可以消除错误,但我需要将选择绑定到命令,就像我在UIKit和Android中所做的那样
那么–这是一种什么样的恶意行为?问题在于此代码与Windows Phone 8.1不兼容 列表视图需要如下设置:
<ListView Grid.Row="1" ItemsSource="{Binding Cases}" IsItemClickEnabled="False" SelectionMode="Single">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Subject}" HorizontalAlignment="Left"></TextBlock>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="SelectionChanged">
<core:InvokeCommandAction Command="{Binding ShowCaseCommand, Mode=OneWay}" />
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
</ListView>
这导致了另一个问题虽然它将绑定到ShowCaseCommand,但它将传入SelectionChangedEventArgs实例,而不是所选列表项
我们使用CommandParameter
解决这个问题
我们在
列表视图中添加了一个属性,就像这样–为什么不能将SelectedItem绑定到ViewModel中的属性?如果我有一个setter调用ShowViewModel,那么ViewModel的界面就不那么直观了。Daily Dilbert示例似乎在iOS中使用ItemSelectedCommand,而不是Windows应用商店。如果我弄明白了为什么触发器不起作用,我会在这里发布答案,但我可能最终会以某种方式预测核心库。
<ListView Grid.Row="1" ItemsSource="{Binding Cases}" IsItemClickEnabled="False" SelectionMode="Single">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Subject}" HorizontalAlignment="Left"></TextBlock>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="SelectionChanged">
<core:InvokeCommandAction Command="{Binding ShowCaseCommand, Mode=OneWay}" />
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
</ListView>
xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
xmlns:core="using:Microsoft.Xaml.Interactions.Core"
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="SelectionChanged">
<core:InvokeCommandAction Command="{Binding ShowCaseCommand, Mode=OneWay}" CommandParameter="{Binding ElementName=listView, Path=SelectedItem}" />
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>